-1

我有一个 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不允许这样做?我怎样才能从程序中任何地方的任何类访问我的对话框的单个实例?

4

2 回答 2

2

如果您确实只需要该特定类的一个始终可用的单个实例,那么您可以根据 Singleton 模式构建它,这样它要么创建一个指针并返回它,要么只返回一个指针(如果它已创建)。通常建议使用单例,因为它们有很多错误,但是对于这些方面的东西,它可能比设置对QDialog继承类的静态引用更容易。

于 2013-09-12T16:17:11.730 回答
2

如果您收到编译器不知道您使用的是什么类型的错误,那么您必须插入前向声明或#include包含前向声明或定义的头文件。

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

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

核心.h:

class DialogType; // forward declaration.

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

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

核心.cpp:

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

DialogType *Core::MyDialog = new DialogType();
于 2013-09-12T16:57:54.623 回答