gpt4 book ai didi

c++ - 从代码访问在 UI 中创建的 Qt 布局?

转载 作者:IT老高 更新时间:2023-10-28 21:51:47 26 4
gpt4 key购买 nike

这可能是我遇到过的最愚蠢的问题,但我非常困惑。我正在尝试开始使用布局,但由于某种原因无法弄清楚这一点。

我尝试通过 .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();
}

最佳答案

假设,您只需将 QtDesigner 中的 QGridLayout 设置为 MainWindow 中的 centralWidget,如下所示:

enter image description here

您可以在 MainWindow 代码中使用正确的对象名称访问它(这里是 gridLayout):

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->gridLayout->addWidget(new QLabel("hello world"),0,0);
}

如果您在 QtDesigner 或代码中设置了布局并且想要更改布局,QWidget 不会让您安装另一个布局,您将收到如下错误消息:

QWidget::setLayout: Attempting to set QLayout "" on MainWindow "MainWindow", which already has a layout

在这种情况下,您必须首先删除现有布局,然后像上面的代码一样安装新布局。

如果你想在你的主函数中访问布局,你可以通过 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();
}

关于c++ - 从代码访问在 UI 中创建的 Qt 布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12659629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com