如何确定Qt中的对话框是否为空?

时间:2011-03-06 08:35:25

标签: c++ qt

我正在尝试显示这样一个简单的对话框:

if (!aboutDialog)
        aboutDialog = new AboutDialog(this);
    aboutDialog->exec();

由于某种原因它不起作用(aboutDialog有一些指针虽然没有初始化),但检查if (aboutDialog == 0)也不起作用。我不想每次都创建实例,但只需要创建一次。我该如何正确检查?

谢谢!

2 个答案:

答案 0 :(得分:3)

您需要在某处明确地将aboutDialog初始化为0。可能在该成员所属的类的构造函数中。

(!aboutDialog)是一个正确的测试。

请考虑以下事项:

#include <iostream>

class Thing {
  void *data;
  public:
    Thing(){}
    void print() {
      std::cout << data << std::endl;
  }
};

int main()
{
  Thing t;
  t.print();
  return 0;
 }

尝试编译并多次运行它。有可能每次都会印出不同的东西。为什么?因为data未初始化。它包含垃圾。与0x1234ABCD或42相比,它有很多机会成为空指针。

要解决此问题,data 需要在某处进行初始化。这里最简单的方法就是在Thing的构造函数中执行此操作,如下所示:

Thing() : data(0) {}

答案 1 :(得分:0)

我的回答可能不是最好的:)我使用Qt和python,你可以在任何时候“从外部”编写新的属性。如果可能的话,在构造aboutDialog时,我会将一个变量(同样可能不是最佳实践)设置为某个值。然后你可以检查这是否稍后设置。就像状态变量或者其他东西:)