【问题标题】:Qt creator: Widget is not added to layoutQt 创建者:小部件未添加到布局中
【发布时间】: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) 两次。

标签: c++ qt qt-creator qwidget qtgui


【解决方案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 中找到答案(在那里解决)并不意味着它不是一个不值得回答的有效问题。如果您认为应该关闭它,请在获得足够声誉后对其进行投票。请注意,一个接近投票标志已被取消,因此社区到目前为止还没有与您达成一致。
猜你喜欢
  • 2012-06-03
  • 1970-01-01
  • 2013-05-01
  • 2013-05-01
  • 2012-09-20
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 2014-10-17
相关资源
最近更新 更多