Qt 创建者:小部件未添加到布局中

Posted

技术标签:

【中文标题】Qt 创建者:小部件未添加到布局中【英文标题】:Qt creator: Widget is not added to layout 【发布时间】:2014-04-23 18:16:27 【问题描述】:

所以我有一个我在 QT creator 中设计的 GUI。

因为我必须添加一个 createWindowContainer 小部件,所以我必须通过 c++ 在我的代码中添加一个小部件。我正在添加一个简单的标签来测试最好的方法。不幸的是,尽管程序可以编译,但没有显示小部件。

实际上显示了我的主窗口,没有所需的小部件。

所以我有以下几行:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)



     ui->setupUi(this);

     ui->gridLayout->addWidget(new QLabel("test"),0,0);

     // MainWindow does other stuff 

     ui->setupUi(this); 

根据我的阅读,这应该是正确的。我究竟做错了什么?有什么好的调试方法吗?

编辑:发现问题。添加了第二个 ui->setupUi 以反映导致问题的错误。如果您调用它两次,它似乎会删除您在第一次调用后添加的任何小部件。

【问题讨论】:

哪个没有显示,标签还是你的小部件? 我正在添加一个标签小部件。它没有被显示。它应该显示一个标有“测试”的标签。假设我可以将任何小部件放在显示 new Qlabel("test") 的位置 - 对吧? 您的代码(到目前为止)没问题。显示更多代码。一定有其他错误。顺便说一句:这是 Qt,不是 QT。 是的,你这部分的代码绝对是对的。理论上应该显示出来。 发现问题。我已经调用了 ui->setupUi(this) 两次。 【参考方案1】:

您调用了两次 UI 设置方法,但更重要的是:第二次调用是在将小部件显式添加到“默认”UI 之后进行的。

这不好,因为小部件会在第二秒之前“清除”,因为它将再次基于您的 UI 文件设置 UI,该文件不包含显式添加的小部件,因此只需删除该行。

因此,您应该改为这样写:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)



     ui->setupUi(this);

     ui->gridLayout->addWidget(new QLabel("test"),0,0);

     // MainWindow does other stuff

【讨论】:

这个问题应该被关闭。原帖已经自己发现了问题(见cmets,版本历史,帖子最后一段)。 @Tay2510:我不关注。在 cmets 中找到答案(在那里解决)并不意味着它不是一个不值得回答的有效问题。如果您认为应该关闭它,请在获得足够声誉后对其进行投票。请注意,一个接近投票标志已被取消,因此社区到目前为止还没有与您达成一致。

以上是关于Qt 创建者:小部件未添加到布局中的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 无法访问动态创建的 QHBoxLayout 小部件

尽管更新了小部件,但 Pyqt5 更新的小部件未添加到布局中

Qt - 从布局中删除所有小部件?

qt 小部件在添加到另一个小部件时重叠

具有单独布局的嵌套 Qt 小部件

如何使布局填充qt选项卡小部件内的所有内容?