MyTetra Share
Делитесь знаниями!
Как задать ширину кнопки QPushButton так, чтобы она вмещала только текст
07.12.2018
12:27
Текстовые метки: qt, QPushButton, кнопка, клавиша, текст, ширина, надпись
Раздел: Компьютер - Программирование - Язык C++ - Библиотека Qt - Принципы написания кода

Очень часто при проектировании интерфейса в Qt программист сталкивается с тем, что кнопки класса QPushButton растягиваются на всю ширину имеющегося места в слое. В то же время, желательно было бы, чтобы кнопка просто вмещала в себя текст своей надписи, и не более того.


Исправить размер кнопки можно с помощью задания правил изменения размеров через объект QSizePolicy. Делается это так:



button=new QPushButton(tr("Reset all shortcuts to default"), this);

button->setSizePolicy(QSizePolicy(QSizePolicy::Maximum,

QSizePolicy::Fixed,

QSizePolicy::ToolButton));



Без установки правил изменения размера кнопка вытягивается по горизонтали на всю ширину слоя:





А если задать вышеуказанные правила, кнопка становится шириной равной ширине текста:





Отдельным вопросом стоит странность в правиле: по ширине задается правило QSizePolicy::Maximum, которое почему-то дает минимальную ширину кнопки. Если же написать QSizePolicy::Minimum, то кнопка опять станет растягиваться на всю ширину слоя. Документация не проливает свет на то, почему так происходит:


QSizePolicy::Minimum

The sizeHint() is minimal, and sufficient. The widget can be expanded, but there is no advantage to it being larger (e.g. the horizontal direction of a push button). It cannot be smaller than the size provided by sizeHint().


QSizePolicy::Maximum

The sizeHint() is a maximum. The widget can be shrunk any amount without detriment if other widgets need the space (e.g. a separator line). It cannot be larger than the size provided by sizeHint().


В общем, вопрос пока остается без ответа, но как минимум, вышеприведенное решение работает.


Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования