QSizePolicy :: Minimum не минимизирует qwidget

Я хочу иметь следующий макет в проекте Qt-C ++: VBoxLayout с двумя QTextEdits, расположенными друг под другом. Верхний должен быть уменьшен до минимального размера: 1 строка текста, если есть одна строка, больше, если есть больше. Нижний должен занять оставшееся место в окне.

Теперь у меня есть следующий код в конструкторе моего главного окна (которое расширяет QMainWindow):

QWidget *mainpanewidget = new QWidget(this);
QVBoxLayout *mainpane = new QVBoxLayout(mainpanewidget);
this->setCentralWidget(mainpanewidget);

QTextEdit *firsttext = new QTextEdit(this);
firsttext->setText("first text");
QTextEdit *secondtext = new QTextEdit(this);
secondtext->setText("second text");

//first try: use sizepolicies
firsttext->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
secondtext->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);

//second try: explicitely set minimum size to something small
firsttext->setMinimumHeight(10);
firsttext->setMinimumWidth(10);

//3th try: stretch factors
mainpane->setStretchFactor(firsttext,0);
mainpane->setStretchFactor(secondtext,1);

//4th try: size policy of surrounding layout
mainpanewidget->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);

mainpane->addWidget(firsttext);
mainpane->addWidget(secondtext);
mainpane->update();

С этим кодом второй QTextEdit становится больше первого, но первый, кажется, думает, что его минимальный размер должен составлять 192 пикселя (14 строк), что намного превышает его необходимое количество строк: 1. Это размер дано sizehint вместо минимальной высоты. К сожалению, кажется, нет способа адаптировать sizehint без создания подкласса QTextEdit.

Я пробовал разные вещи, как видно из приведенного выше кода, чтобы создать один минимальный QTextEdit и один расширяющийся. Единственное, что работает, — это установить максимальную высоту первого QTextEdit, который я не хочу жестко кодировать, поскольку текст в нем может быть больше, чем какой-то предел, который я сейчас жестко кодирую. Плюс жесткие ограничения не очень хорошая практика кодирования.

Поскольку я хочу использовать одинаковые размеры для разных qwidgets в моем приложении (QTextEdit, метки, кнопки, …), я бы предпочел не использовать наследование, так как это привело бы к множеству дополнительных классов, которые все изменяются, кроме одного вещь их родительского класса.

Я работаю в Qt 5.7.0.

Примечание: кажется, что в Qt есть много вопросов относительно qsizepolicy и изменения размера. Если я пропустил дубликат этого вопроса, вы можете связать его и закрыть этот вопрос.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]