首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

关于QT的一个小疑点

2013-02-25 
关于QT的一个小问题.cpp文件中//QScopedPointerUIMainControlPrivate d_ptr.h文件中d_ptr.reset(new UI

关于QT的一个小问题
.cpp文件中


    //QScopedPointer<UIMainControlPrivate> d_ptr;  .h文件中
    d_ptr.reset(new UIMainControlPrivate(GetUIONSList(),
                                         GetPopupList()));

    Singleton<UIKeyTranslator>::create();
    UIKeyTranslatorInst.onInitialize();
    UIKeyManagerInst.setTranslator(&UIKeyTranslatorInst);

    Q_D(UIMainControl);
    d->m_controllersManager.onInitialize();//这里的d其实就是d_ptr,这个我不怎么明白

麻烦谁熟悉QT的能不能告诉我为什么这里的d由d_ptr对象变成了d。 qt c++
[解决办法]
你这代码能不能全一点啊,看不懂
d是哪儿来的啊
d是个指针 d_ptr是对象
[解决办法]
肯定还有个地方定义了 d 
d是一个指向d_ptr的指针。
从->就可以猜出来。

[解决办法]
Q_D(UIMainControl); 宏


#define Q_D(Class) Class##Private * const d = d_func()

#define Q_DECLARE_PRIVATE(Class) \
    inline Class##Private* d_func() { return reinterpret_cast<Class##Private *>(qGetPtrHelper(d_ptr)); } \
    inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private *>(qGetPtrHelper(d_ptr)); } \
    friend class Class##Private;


[解决办法]
这些和 Qt的历史有关。有的时候 研究Qt需要看考KDE的代码。
总的来说,d_ptr 是继承来的,指向的对象可能不是自己当前的类所需要的,需要转换一下。
例如,d_ptr在定义的时候 可能是 QWidgetPrivate
现在用的时候 需要让其成为 QLabelPrivate

引用:
那么d这个是不是指向d_ptr的指针
能不能帮我大体说一下Q_D到底有什么作用,我在网上看了一下,没怎么看懂

[解决办法]
Qt有种机制。 public class 和 private class


一个public class有一个d指针。指向private class。private class会根据每个平台不同。实现不一样。

我们在平时用到的Qt api就是public class..private class需要跟踪源码才能看到。

热点排行