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 小部件