5

我正在尝试在网格布局中插入 QPushButton,这很容易,但我不会提前知道数字。

这是我所拥有的:

测试应用程序.cpp

#include "testapp.h"

testApp::testApp(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            QPushButton* panelButton = new QPushButton();
            panelButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
            ui.PanelButtonGridLayout->addWidget(panelButton,i,j);
        }
    }
}

testApp::~testApp()
{

}

主文件

#include <QtGui/QApplication>

#include "testapp.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    testApp w;
    w.show();
    return app.exec();
}

所以我知道这行不通,因为该对象将在当前循环结束时被删除。

我考虑过在 main 中创建 QPushButton 的 QList(例如)并将其传递给 testapp 类,但我不确定这是一个好的解决方案。可能有更好的方法。

编辑:由于某些原因,它没有编译。现在是。我讨厌它到来的时候。

4

1 回答 1

6

实际上,不,对象不会在循环结束时被删除,因为您将其分配在堆上,而不是在堆栈上:

 QPushButton* panelButton = new QPushButton();

在这种情况下,按钮将在其父级 ( ui.PanelButtonGridLayout) 被销毁时自动销毁。

正如下面的评论所述,对象的父级将通过addWidget方法在内部设置。

文档中:

注意:项目的所有权转移到布局,布局负责删除它。

于 2013-09-19T15:41:48.630 回答