QT: каково различие между расположением и виджетом?

Я думал, что расположение является просто виджетом, который держит больше виджетов внутри. Но теперь я нахожу, что не могу добавить его к другим виджетам с помощью addWidget. Например, как добавить расположение к QSplitter?

7
задан Łukasz Lew 9 April 2010 в 16:20
поделиться

3 ответа

QWidget имеет встроенную поддержку макетов через layout() и setLayout(...) функции. Объект макета управляет позиционированием различных дочерних виджетов, которые могут быть добавлены в макет. Кроме того, он следит за тем, чтобы правильно оразмерлять родительский виджет на основе указанных ограничений . Если макет еще не имеет родительского виджета, то, как только макет будет прикреплен к виджету с setLayout(), он установит размер этого родительского виджета.

Но некоторые виджеты больше похожи на менеджер макета, чем на виджет, такие как QSplitter и QTabWidget. Рассмотрим, например, QSplitter. Несмотря на то, что это один виджет, он представляет две разные области, с которыми можно работать. В этом случае единый менеджер макета для двух разных областей на самом деле не имеет смысла. Как и QSplitter, QTabWidget имеет некоторые варианты поведения, которые делают один макет не только ненужным, но и бесполезным.

Я думаю, что именно приведенное выше слияние макета и виджета делает разделение макета и виджета иногда запутанным.

4
ответ дан 7 December 2019 в 01:19
поделиться

Нет, макет - это не виджет или контейнер. Макет больше похож на «помощника», который прикрепляется к окну и определяет наилучшее место для размещения каждого виджета.

Этот пример из документации Qt должен помочь ( http://qt.nokia.com/doc/4.2/layout.html ):

QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");

QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);

window->setLayout(layout);
window->show();
3
ответ дан 7 December 2019 в 01:19
поделиться

QLayout - это менеджеры компоновки.Они управляют размещением и изменением размеров виджетов внутри родительского виджета. Из документации:

Макеты - это элегантный и гибкий способ автоматического размещения дочерних виджетов в их контейнере. Каждый виджет сообщает свои требования к размеру макету через свойства sizeHint и sizePolicy, и макет распределяет доступное пространство соответствующим образом.

Например, установка макета виджета на QHBoxLayout приведет к тому, что его дочерние виджеты будут расположены горизонтально.

Подробнее об этом можно прочитать здесь .

3
ответ дан 7 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: