读书人

关于QT的一个小疑点

发布时间: 2013-02-25 10:23:36 作者: rapoo

关于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需要跟踪源码才能看到。

读书人网 >QT开发

热点推荐