Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: star62 от Январь 11, 2009, 15:19



Название: QLabel. Ширина
Отправлено: star62 от Январь 11, 2009, 15:19
Добрый день. Такая проблема. Надо узнать какую задать ширину QLabel, чтобы в него уместилась строка которую он отображает.
Вычислить ширину строки со всеми параметрами шрифта, размера и т.д. которые настроены в QLabel.

У меня программно меняется текст в метке и иногда он не вмещается в ее размер. Надо исправить, но не пойму как.


Название: Re: QLabel. Ширина
Отправлено: lit-uriy от Январь 11, 2009, 15:23
У меня программно меняется текст в метке и иногда он не вмещается в ее размер. Надо исправить, но не пойму как.
Метка сама регулирует свой размер, если политика размера по умолчанию, а не фиксировнная.


Название: Re: QLabel. Ширина
Отправлено: Dendy от Январь 11, 2009, 14:55
Метка сама регулирует свой размер, если политика размера по умолчанию, а не фиксировнная.

И размер окна будет сам прыгать. Или соседние элементы двигаться туда-сюда.

Автору. Возможно поможет:

Код:
label->setMinimumWidth( QFontMetrics( label->font() ).width( "widest string that label should contain" ) );


Название: Re: QLabel. Ширина
Отправлено: sLiva от Январь 11, 2009, 16:56
можно это попробовать:

Код
C++ (Qt)
void QWidget::adjustSize()


Название: Re: QLabel. Ширина
Отправлено: lit-uriy от Январь 11, 2009, 18:11
И размер окна будет сам прыгать. Или соседние элементы двигаться туда-сюда.
А в случае если руками (в коде) изменять размер, то таких эфектов не будет? ;)


Название: Re: QLabel. Ширина
Отправлено: Dendy от Январь 11, 2009, 18:26
А в случае если руками (в коде) изменять размер, то таких эфектов не будет? ;)

Будут. От этого и избавляемся установкой минимальной ширины. Я бы даже рекомендовал: QWidget::setFixedWidth().


Название: Re: QLabel. Ширина
Отправлено: Hordi от Январь 12, 2009, 10:08
QLabel label;
QRect r = QFontMetrics(label.font(),&label).boundingRect("XXX");
label.resize(r.width(),r.height());


Название: Re: QLabel. Ширина
Отправлено: star62 от Январь 15, 2009, 10:19
Всем спасибо большое. Я решил эту задачу через setGeometry(), а там для ширины использую sizeHint().width() и updateGeometry().

Предлагаемые варианты тоже хороши.