如何在 Qt 中正确设置 d 指针

Posted

技术标签:

【中文标题】如何在 Qt 中正确设置 d 指针【英文标题】:How to make d-pointer right in Qt 【发布时间】:2013-08-16 09:53:31 【问题描述】:

我创建了myClass 类,为了隐藏成员,使用了 d 指针,但在编译我的源代码时出错。代码如下:

头文件:

class myClassPrivate;

class myClass : public QObject

    Q_OBJECT
public:
    myClass(QObject *parent = 0);
    ~myClass();
    ...
signals:

public slots:

private:
    myClassPrivate *d;
;

及相关的.cpp

myClass::myClass(QObject *parent):
    QObject(parent),
    d(new myClassPrivate())



myClass::~myClass()

    delete d;


class myClassPrivate

  public:
    myClassPrivate();
    ...some methods...
    QTextStream stream;
    QFile* m_File;
;

myClassPrivate::myClassPrivate():
    m_File(new QFile)


它说:'struct myClassPrivate'的前向声明; 不完整类型'myClassPrivate'的无效使用

【问题讨论】:

【参考方案1】:

myClass 构造函数中使用它之前,您必须先放置您的myClassPrivate 声明。在.cpp 文件中:

class myClassPrivate

    // ...
;

myClass::myClass(QObject *parent):
    QObject(parent),
    d(new myClassPrivate())


您可能想查看网络上的一些资源来解释这个概念和 Qt 的便利宏 Q_DQ_DECLARE_PRIVATE 等等:

    Blog post on Qt private classes and D-pointers KDE Techbase on D-Pointers

【讨论】:

好吧,谢谢你,我可以在myClassPrivate中创建析构函数以释放(m_File),否则没有必要...... 是的,你可以并且应该创建一个~myClassPrivate析构函数deleteingQFile——否则你会泄漏内存!【参考方案2】:

查看我的另一个答案,有很好的示例可以作为起点:Invalid use of incomplete type on qt private class

【讨论】:

以上是关于如何在 Qt 中正确设置 d 指针的主要内容,如果未能解决你的问题,请参考以下文章

qt中如何获得控件所在的布局的指针。。

qt图形界面编程如何调用对象指针?

如何正确地将对象/指针存储到 Qlist 中

如何存储在 Qt 设置中?

在Qt中手动设置窗口布局的正确方法

如何在Windows下为Qt配置环境变量