【问题标题】:How to check that Qwidget exist如何检查 Qwidget 是否存在
【发布时间】:2010-12-11 21:11:13
【问题描述】:

如标题中所示,如何检查 QWidget 中的子类是否存在?

当我尝试这样的事情时,它会破坏应用程序结束抛出错误

void MainWindow::slotAddLoginData() {
    if(!addLoginData) {
        addLoginData = new AddLoginData(this);
        connect(this, SIGNAL(setEnabledALDbtnOK(bool)),
        addLoginData, SLOT(btnOkEnabled(bool)));

    }
    addLoginData->show();
    addLoginData->activateWindow();

}

【问题讨论】:

  • 哪里坏了?它会抛出什么错误?
  • 程序意外结束。当我删除“if”语句时,一切都很好
  • 用调试器运行它(例如 *NIX 系统上的 GDB)并告诉我们它在哪里它坏了。
  • addLoginData->show() 时发生错误;被称为
  • 是分段错误吗?我的猜测是您的父类没有将 addLoginData 初始化为 NULL。

标签: c++ qt qwidget


【解决方案1】:

看起来addLoginData 没有初始化

【讨论】:

    【解决方案2】:

    正如其他人所说, addLoginData 未初始化。你不能这样做:

    if(!addLoginData) { ... }

    除非您将 addLoginData 初始化为 0。 所以,正如 Georg 所说,初始化它,除了做那个..

    MainWindow::MainWindow() : addLoginData(0)

    (注意“0”)

    【讨论】:

    • addLoginData()addLoginData(0) 在这里做同样的事情 - 默认初始化意味着在标量类型的情况下零初始化......参见例如here.
    【解决方案3】:

    一种可能是您尚未初始化addLoginData。在这种情况下使用类似的东西:

    MainWindow::MainWindow()
      : addLoginData()
      // ...
    {
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 2011-08-23
      • 2012-02-29
      • 2020-07-05
      • 1970-01-01
      相关资源
      最近更新 更多