Факторы растяжения QSplitter отличаются от нормальных
Я хочу создать гибкий макет, где пользователь может изменять размеры виджетов, но по-прежнему предоставлять хороший макет по умолчанию. Я использую Qt Designer для всего.
В качестве минимального примера я использовал простую Windows с Widget и plainTextEdit. Последнее, кажется, вызывает проблемы, поэтому я выбираю его. Сначала я построил его без Splitter, который работал просто отлично. Кстати, коэффициенты растяжения 1:1.
Теперь я поместил оба виджета в Splitter (разбив основной макет, поместив оба виджета в Splitter и установив новый макет для основного виджета). Изменение размера все еще работает, но факторы растяжения ведут себя странно:
PlainTextEdit, кажется, занимает много места. Факторы растяжения по-прежнему 1:1. Я нашел работу, изменив растяжение верхнего виджета на гораздо более высокое значение (в данном случае 9:1), что снова выглядит хорошо:
Итак, мой вопрос: почему факторы растяжения начинают вести себя странно, когда я помещаю изображения в Splitter? И как я могу решить эту проблему, не используя произвольные угаданные факторы растяжения?
1 ответ
QSplitter::setSizes()
может быть использован для установки относительных размеров. Согласно документации, "любое дополнительное / недостающее пространство распределяется между виджетами в соответствии с относительным весом размеров".
В этом случае это немного некрасиво, так как вы должны добавить это в свой код, а не редактировать свой макет в QDesigner (обычно вы хотите определить свой макет только в одном месте), но все же это быстро и работает:
MyWindow::MyWindow(QWidget* parent):
QWidget(parent)
{
m_Ui.setupUi(this);
m_Ui.splitter->setSizes({2000, 1000, 1000});
Однако мне пришлось использовать большие числа (вместо {2, 1, 1}), возможно, потому что на данный момент окно еще не полностью настроено (очевидно, Qt не большой поклонник RAII...). Кроме того, этот вид записи работает, вероятно, только с последней версией C++, в противном случае вы также можете определить QList в некоторых дополнительных строках.