Факторы растяжения 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 в некоторых дополнительных строках.

Другие вопросы по тегам