Я хочу иметь следующий макет в проекте 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 и изменения размера. Если я пропустил дубликат этого вопроса, вы можете связать его и закрыть этот вопрос.
Задача ещё не решена.
Других решений пока нет …