Qt Layout на QMainWindow - PullRequest
       25

Qt Layout на QMainWindow

34 голосов
/ 02 октября 2009

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

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

Ответы [ 4 ]

64 голосов
/ 17 сентября 2012

Если вы хотите сделать это с кодом, вместо использования 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);

}
39 голосов
/ 02 октября 2009

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

alt text

13 голосов
/ 02 октября 2009

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

3 голосов
/ 22 января 2015

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

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

...