Макет Qt в QMainWindow
-
19-09-2019 - |
Вопрос
Я разработал QMainWindow
с QtCreator's
дизайнер.Он состоит из центрального виджета по умолчанию ( QWidget
), который содержит QVBoxLayout
со всеми остальными виджетами в нем.Теперь все, чего я хочу, это чтобы QVBoxLayout
автоматически занимает все пространство центрального прямоугольника виджетов.
Как я могу это сделать?Я не нашел никаких полезных свойств ни в центральных свойствах виджетов, ни в QVBoxLayout's
те.
Решение
Вам не нужно создавать QVBoxLayout
вручную.Просто выберите центральный QWidget
и нажмите кнопку создания макета.
Другие советы
Если вы хотите сделать это с помощью кода вместо использования 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);
}
Добавьте хотя бы один виджет на свой MainWindow
.Затем выберите свое окно, щелкнув по нему, и нажмите кнопку VerticalLayout
Кнопка вверху QTCreator
.Вертикальный макет автоматически добавляется в центральный виджет и заполняет всю поверхность.
На этот вопрос уже был дан ответ, но лично я предпочитаю сохранить все элементы управления. и макеты, добавляемые в форму вручную.Я не добавляю элементы управления в файлы классов, я просто подключаю сигналы/слоты, чтобы скрыть/показать виджеты, соответствующие логике класса, внутри класса.
Чтобы вручную добавить макет к любому виджету, необходимо сначала добавить хотя бы один дочерний виджет/элемент управления.Мне это было не совсем понятно, и я сначала пытался добавить макет.