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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Elidable QLabel  (Прочитано 4273 раз)
Akon
Гость
« : Июнь 27, 2015, 23:27 »

QLabel при уменьшении своей длины просто обрезает выводимый текст. Требуется в данном случае добавлять многоточие, как это делает, QTabWidget, например (QTabWidget::setElideMode()).
Записан
sociopath
Гость
« Ответ #1 : Июнь 27, 2015, 23:42 »

http://doc.qt.io/qt-5/qtwidgets-widgets-elidedlabel-example.html
Записан
Akon
Гость
« Ответ #2 : Июнь 27, 2015, 23:44 »

Да забыл, мне нужно с Qt 4. За ссылку спасибо, изучу.
Записан
Akon
Гость
« Ответ #3 : Июнь 27, 2015, 23:54 »

Там написано
Цитировать
QLabel can elide text that doesn't fit within it, but only in one line.
Это как? У меня он просто обрезается, никакого многоточия.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Июнь 28, 2015, 00:33 »

Через QFont, вроде, можно посчитать длину строки в пикселях - сравнивайте её с длиной виджета...
Записан
Akon
Гость
« Ответ #5 : Июнь 28, 2015, 13:36 »

Наскоро сделал следующий хак (мне пока нужен только Qt::ElideRight):
Код:
class QElidableLabel : public QLabel
{
Q_OBJECT
typedef QLabel Base;

public:
explicit QElidableLabel(QWidget* parent = 0, Qt::WindowFlags f = 0) :
Base(parent, f) {}
explicit QElidableLabel(const QString& text, QWidget* parent = 0, Qt::WindowFlags f = 0) :
Base(text, parent, f) {}

protected:
virtual void paintEvent(QPaintEvent*);

private:
Q_DECLARE_PRIVATE(QLabel)
};

void QElidableLabel::paintEvent(QPaintEvent* event)
{
Q_D(QLabel);
QScopedValueRollback<QString> scopedText(d->text);
d->text = fontMetrics().elidedText(d->text, Qt::ElideRight, contentsRect().width());
Base::paintEvent(event);
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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