В моем приложении мне нужно, чтобы все QPushButton s имели ширину не менее 150px, но больше, если это необходимо.Для этого я использую глобальную таблицу стилей (которая содержит много других свойств) с этим простым ограничением:
QPushButton {
min-width: 150px;
}
Дело в том, что мне также нужны кнопки с текстом, который не помещается внутри 150px, чтобыбыть не в состоянии сжаться до ширины, ниже которой весь текст не будет отображаться.
Предполагается, что это нормальное поведение для QPushButton, но проблема в том, что, как объяснено в документации для minimalSizeHint () :
QLayout никогда не изменит размердля виджета с размером меньше минимального размера подсказка , если для параметра minSize () не установлено значение или для политики размера не задано значение QSizePolicy :: Ignore. Если задано минимальное значение размера (), подсказка о минимальном размере будет игнорироваться.
В некоторых случаях это приводит к тому, что кнопки с длинным текстом при запуске отображаются с нужным размером, нопри уменьшении окна кнопка становится слишком маленькой, чтобы отобразить весь текст.
Я подготовил простой пример, показывающий это поведение:
#include <QWidget>
#include <QApplication>
#include <QHBoxLayout>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget *w = new QWidget();
QLayout* layout = new QHBoxLayout(w);
QPushButton* buttonA = new QPushButton("A", w);
QPushButton* buttonB = new QPushButton("B", w);
buttonB->setStyleSheet("min-width: 150px");
QPushButton* buttonC = new QPushButton("Long long text that doesn't fit in 150px", w);
QPushButton* buttonD = new QPushButton("Very very very long text that doesn't fit in 150px", w);
buttonD->setStyleSheet("min-width: 150px");
layout->addWidget(buttonA);
layout->addWidget(buttonB);
layout->addWidget(buttonC);
layout->addWidget(buttonD);
w->show();
return a.exec();
}
Я думал об использовании динамических свойств установить ограничение минимальной ширины только для кнопок с базовой шириной <150px, но это не представляется возможным. <br>
Есть ли способ сделать то, что я хочу, с помощью таблиц стилей, или у меня естьсоздать подкласс QPushButton и переопределить метод minimumSizeHint()
(которого я хотел бы избежать, поскольку мне пришлось бы заменить множество кнопок в моем приложении)?