Qt5:我如何使用QPointer与Forward声明类



问题:裸指针替换为smart QPointers,并与前向声明的类一起使用。

背景:

正如几乎所有关于现代c++的文本所建议的那样,应该避免使用指针,而应使用智能指针。在Qt工具包中有一组可用的智能指针,在这种情况下我特别感兴趣的一个:QWeakPointer (Qt 4)或QPointer (Qt 5),它被认为可以自由地与指针互换,并在删除各自的对象(源自QObject)时设置为NULL,从而有助于防止所有太常见的悬空指针问题。然而,QPointer所指向的对象必须是QObject派生类型的要求阻止了前向声明类的使用。

问题:我如何将QPointer类型的变量与前向声明类型的类头中的前向声明类结合起来?

如何避免包含我想使用QPointer的对象的整个头文件?

例子:

#pragma once
#include <QObject>
#include <QPointer>
class MyQWidget; // Forward-declared class
class SomeClass {
   QPointer<MyQWidget> m_myWidget;
};

注意:我读过这样的问题:在c++中,是否可以将一个类声明为从另一个类继承?在我的问题中,我正在寻找特定于qt的方法来克服这个限制(或更好的设计功能),如果有的话。

编辑:我的主要编译器是MSVC 2010,我得到的错误是

error C2079: 'MainWindow::m_test' uses undefined class 'QPointer<T>'
    with
    [
        T=MyQWidget
    ]

您确定已正确包含QPointer吗?这似乎就像编译器无法找到QPointer而不是MyQWidget。

相关内容

  • 没有找到相关文章

最新更新