Qt Layout на QMainWindow

Я разработал конструктор QMainWindow с дизайнером QtCreator's. Он состоит из центрального виджета по умолчанию (a QWidget), который содержит QVBoxLayout со всеми другими виджетами в нем. Теперь все, что я хочу, состоит в том, что QVBoxLayout автоматически занимает все пространство прямоугольников центрального прямоугольника.

Как я могу это сделать? Я не нашел никакого полезного свойства ни в свойствах центрального виджета, ни в QVBoxLayout's.

Ответ 1

Вам не нужно создавать QVBoxLayout вручную. Просто выберите центральный QWidget и нажмите кнопку make-layout.

alt text

Ответ 2

Если вы хотите сделать это с помощью кода вместо QtCreator, вы можете установить макет в QWidget, а затем установить QWidget в качестве центрального виджета главного окна, например:

#include <QtGui>
#include <QWidget>
#include <QHBoxLayout>
#include "mainwindow.h"

MainWindow::MainWindow() {  

        // Set layout
        QHBoxLayout *layout = new QHBoxLayout;
        layout->addWidget(myWidget1);
        layout->addWidget(myWidget2);

        // Set layout in QWidget
        QWidget *window = new QWidget();
        window->setLayout(layout);

        // Set QWidget as the central layout of the main window
        setCentralWidget(window);

}

Ответ 3

Добавьте по крайней мере один виджет на MainWindow. Затем выберите свое окно, щелкнув по нему и нажмите кнопку VerticalLayout в верхней части QTCreator. Вертикальная компоновка автоматически добавляется в центральный виджет и заполняет всю поверхность.

Ответ 4

Это уже ответили, но я лично предпочитаю, чтобы все элементы управления и макеты добавлены вручную в форму. Я не добавляю элементы управления в файлы классов, я просто подключаю сигналы/слоты, чтобы скрыть/показать виджеты, относящиеся к логике класса, внутри класса.

Чтобы вручную добавить макет к любому виджету, вы должны сначала добавить хотя бы один дочерний виджет/элемент управления. Это было не совсем понятно для меня, и я сначала попытался добавить макет.