20 c++ layout qt widget qt-creator
这可能是我遇到的最愚蠢的问题,但我非常困惑.我试图开始布局,但由于某种原因无法想出这个.
我已经尝试通过.ui文件添加一个QGridLayout,只需将其拖放到我的项目中即可.由于我想在加载时使用小部件填充网格,我尝试在调用this-> setupui()之前/之后使用"mainwindow.h"文件中的"gridLayout"对象.
由于我无法理解,我选择尝试使用代码从头开始创建它,并将以下内容添加到main.cpp文件中.这也没有显示,所以我想知道如何在表单加载时填充网格.
#include <QtGui/QApplication>
#include <QtGui>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow w;
QGridLayout *grid = new QGridLayout;
QLabel *label1 = new QLabel("test");
QLabel *label2 = new QLabel("test 2");
grid->addWidget(label1, 0, 0);
grid->addWidget(label2, 0, 1);
w.setLayout(grid);
w.show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
tom*_*odi 27
假设您只需在QtDesigner中将QGridLayout设置为MainWindow中的centralWidget,如下所示:

您可以使用正确的对象名称(这里是gridLayout)以这种方式在MainWindow代码中访问它:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->gridLayout->addWidget(new QLabel("hello world"),0,0);
}
Run Code Online (Sandbox Code Playgroud)
如果您在QtDesigner或代码中设置了布局并且想要更改布局,QWidget将不允许您安装另一个布局,您将收到如下错误消息:
QWidget :: setLayout:试图在MainWindow"MainWindow"上设置QLayout"",它已经有了一个布局
在这种情况下,您必须首先删除现有布局,然后像上面的代码一样安装新布局.
如果要访问main函数中的布局,可以通过QObject :: findChild函数实现,如下所示:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
QGridLayout *gridLayout = w.findChild<QGridLayout*>("gridLayout");
Q_ASSERT(gridLayout);
gridLayout->addWidget(new QLabel("hello, the second"));
w.show();
return a.exec();
}
Run Code Online (Sandbox Code Playgroud)