Qt Layout on QMainWindow
我用 QtCreator's 设计器设计了一个 QMainWindow。它由默认的中央小部件(一个 QWidget)组成,其中包含一个 QVBoxLayout 以及其中的所有其他小部件。现在我想要的就是 QVBoxLayout 自动占据整个中央小部件矩形空间。
我该怎么做?我在中央小部件属性和 QVBoxLayout's 属性中都没有找到任何可用的属性。
如果你想用代码而不是使用 QTCreator 来做,你可以在 QWidget 中设置布局,然后将 QWidget 设置为主窗口的中央小部件,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #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);
} |
-
太感谢了!但我不明白......引入创建新小部件的需求背后的原因是什么?只允许将布局应用于主窗口不是更直观吗?
-
我面临同样的问题。在来到这里之前,从逻辑上讲,我试图在 QMainWindow 上设置布局但没有奏效。使用 QWidget 它工作。
-
如果 MainWindow 继承了 QMainWindow 的形式,那么您可以调用 centralWidget()->setLayout(layout);。我在这里找到了这个
-
我担心的是 Qt 文档说 Note: Creating a main window without a central widget is not supported. 话虽如此,它为我编译和运行......但我希望 Qt 对这个"要求"更清楚一点。
-
你如何delete() layout 对象?是自动的吗?
您不必手动创建 QVBoxLayout。只需选择您的中心 QWidget 并按下制作布局按钮。
- 非常好,这就是我所追求的。谢谢!
-
请注意,中央小部件上必须至少有一个小部件,才能启用制作布局按钮
在您的 MainWindow 上添加至少一个小部件。然后通过单击选择您的窗口并单击 QTCreator 顶部的 VerticalLayout 按钮。您的垂直布局会自动添加到中央小部件并填充所有表面。
-
谢谢你。我无法弄清楚,因为我的 MainWindow 上没有任何小部件,所以您的回答最有帮助
这已经得到解答,但我个人更喜欢将所有控件元素和布局手动添加到表单中。我不在类文件中添加控件,我只是在类中连接信号/插槽以隐藏/显示与类中的逻辑相关的小部件。
要手动向任何小部件添加布局,您必须首先添加至少一个子小部件/控件。这对我来说并不完全清楚,我试图先添加布局。