如何从任何类全局访问QT对话框

时间:2013-09-12 16:12:56

标签: c++ qt

我有一个QT对话框,我需要从程序中的任何位置访问。基本上我需要做的就是在我的程序中的某个地方创建一个静态实例,比如:

'''注意''':这只是我想要做的一个例子,而不是实际的代码(这里发布的时间太长了)

class Core
{
  public:
    static DialogType *MyDialog;
};

DialogType *Core::MyDialog = NULL;

// later in main.cpp

int main(int argc, char *argv[])
{
    try
    {
        Core::Init();
        QApplication a(argc, argv);
        Core::MyDialog = new DialogType();
        ...

然而,尽管这适用于任何其他类型,但它不适用于从QDialog继承的类。编译器只返回:DialogType没有命名一个类型(是的,我做#include那个带有DialogType声明的.h文件)

我做错了什么?为什么QT不允许这样做?如何才能在程序的任何位置从任何类访问我的对话框的单个实例?

2 个答案:

答案 0 :(得分:2)

如果你确实只需要一个单独的,总是可用的特定类的实例,那么你可以用Singleton模式构建它,这样它就可以创建一个指针并返回它,或者只是在它被创建时返回一个指针。单身人士经常被推荐,因为他们有很多错误,但是对于这些问题,它可能比设置QDialog继承类的静态引用更容易。

答案 1 :(得分:2)

如果您收到编译器不知道您正在使用的类型的错误,则必须插入前向声明,或#include包含前向声明或定义的头文件。< / p>

如果您的成员类型是指针或引用,则前向声明就足够了,但如果它是任何其他ADT,则需要#include

在您发布的代码中,您可以:

Core.h:

class DialogType; // forward declaration.

class Core
{
  public:
    static DialogType *MyDialog;
};

在您的源文件中,您可以拥有:

Core.cpp:

#include "Core.h"
#include "DialogType.h"

DialogType *Core::MyDialog = new DialogType();