Russian Qt Forum
Сентябрь 30, 2024, 20:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QLabel с многоточием  (Прочитано 8880 раз)
serkol
Гость
« : Август 13, 2010, 15:44 »

Я показываю простой HTML (части текста жирным шрифтом) в QLabel.

Не могу придумать как показывать многоточие в конце, когда текст не влазит...
Кто-нибуть мог бы подсказать?
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Август 13, 2010, 20:06 »

Посмотри это: http://doc.trolltech.com/4.6/qfontmetrics.html
Можно определить размер строки в пикселах, соответственно если она больше ширины лейбла, то ставь троеточие..думаю разберешься Улыбающийся
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Август 13, 2010, 22:54 »

может сгодится:
QString QFontMetrics::elidedText ( const QString & text, Qt::TextElideMode mode, int width, int flags = 0 ) const
Записан

Юра.
serkol
Гость
« Ответ #3 : Август 14, 2010, 03:33 »

Разве QFontMetrics понимает HTML?
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #4 : Август 14, 2010, 11:15 »

Разве QFontMetrics понимает HTML?
А почему нет то..QFontMetrics работает с QFont, а в нем хранится вся инфа о форматировании (bold, italic и т.д.)..думаю что все будет работать.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
serkol
Гость
« Ответ #5 : Август 14, 2010, 22:05 »

Я наверно непонятно написал. У меня QLabel показывает HTML, в котором части текста имеют разные характеристики. То есть "строка" может выглядеть так:

Заголовок
Важно, не очень важно, совсем неважно

В этом примере, это все один контрол QLabel, в котором одна HTML "строка" форматирует текст как 2 строки, с использованием разных размеров шрифтов и атрибутов bold и italic.

Наверное единственный выход - это использовать QWebView для рендера текста, прикрутив к нему css, который будет ставить многоточие в конце блока: {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}

Заморочка в том, что сейчас я втыкаю QLabel-ы в каждую строку QListView, как самый простой способ использование HTML в списке типа QListView. Втыкать туда десятки QWebView наверное не самый лучший вариант - наверное прийдется написать delegate, и использовать один и тот-же QWebView для рендера всех строк списка...
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Август 15, 2010, 04:13 »

>>прикрутив к нему css, который будет ставить многоточие в конце блока:
>>{overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
а что мешает прицепить эту таблицу стилей к метке и посмотреть  будет ли эффект?
Записан

Юра.
serkol
Гость
« Ответ #7 : Август 19, 2010, 07:24 »

QLabel такого конечно не понимает - в доке написано что он понимает только простой HTML. Я проверял. Хуже что и QWebView этого тоже не понял, хотя браузеры понимают (например Firefox, Safari)
Записан
serkol
Гость
« Ответ #8 : Август 19, 2010, 07:55 »

Вообще-то QWebView это делает - я сделал ошибку в стиле. А QLabel естественно не делает. Вот html кому интересно:

Код:
<head><style type='text/css'>
p.test {
border: 1px solid #000000;
white-space: nowrap;
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
}
</style> </head>
<body><p class=test width=200px>Very long text, Very long text, Very long text, Very long text, Very long text, Very long text, Very long text, Very long text, Very long text, Very long text, Very long text END</p>
</body>
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.147 секунд. Запросов: 23.