void Label::setText(const String &text) { DPTR(Label); d->text = text; } 到这里就基本实现了Qt中d_ptr和q_ptr的作用。
// global.h (macros) #define DPTR(Class) Class##Private *d = static_cast<Class##Private *>(d_ptr) #define QPTR(Class) Class *q = static_cast<Class *>(q_ptr) // label.cpp void Label::setText(constString &text) { DPTR(Label); d->text = text; } void LabelPrivate::someHelpe...
friendclassClass##Private;#defineQ_DECLARE_PRIVATE_D(Dptr, Class) \inline Class##Private* d_func() {returnreinterpret_cast<Class##Private *>(qGetPtrHelper(Dptr)); } \ inlineconstClass##Private* d_func()const{returnreinterpret_cast<constClass##Private *>(qGetPtrHelper(Dptr)); } \ friend...
2. 由于D和Q指针是从基类继承下来的,子类中由于继承导致类型发生变化,需要通过static_cast类型转化,所以DPTR() 与QPTR()宏定义实现了转换。 例子: /* widget.h */ class Widget { public: Widget(); protected: // 只有子类会访问以下构造函数 Widget(WidgetPrivate &d);// 允许子类通过它们自己的私有结构...
inline const Class##Private* d_func() const { return reinterpret_cast<const Class##Private *>(Dptr); } \ friend class Class##Private; 暂时还不清楚到底是哪个,继续往下看了。 qt_addObject(d_ptr->q_ptr = this); 这个函数中,首先是d_ptr->q_ptr = this,该方法将当前对象的指针赋值给了刚刚...
由于D和Q指针是从基类继承下来的,子类中由于继承导致类型发生变化,需要通过static_cast类型转化,所以DPTR()与QPTR()宏定义实现了转换。 题目 讲一下Qt的D指针和Q指针? 8. Qt信号槽(反射机制)相关 Qt信号槽的调用流程 MOC查找头文件中的signal与slots,标记出信号槽。将信号槽信息储存到类静态变量staticMetaObject...
(d_ptr)); }\ friend class Class##Private; #define DPTR(Class) Class##Private * const d = d_func() class MyClassPrivate; class MyClass : public QObject { Q_OBJECT public: explicit MyClass(QObject *parent = 0); virtual ~MyClass(); void testFunc(); protected: MyClass(MyClass...
DeletePtr dptr = qMetaTypeDeleteHelper<T>; return QMetaType::registerType(typeName, reinterpret_cast<QMetaType::Destructor>(dptr), reinterpret_cast<QMetaType::Constructor>(cptr)); }该函数的核心就是调用了registerType 函数 两个Helper模板函数分别对构造和析构函数进行封装register...
inlineClass##Private* d_func() {returnreinterpret_cast<Class##Private *>(Dptr); } / inlineconstClass##Private* d_func()const{returnreinterpret_cast<constClass##Private *>(Dptr); } / friendclassClass##Private; #define Q_DECLARE_PUBLIC(Class) / ...
\image qtcreator-valgrind-remote-settings.png {Start Remote Analysis dialog} \li Select the application to run and analyze, as well as the \l{glossary-buildandrun-kit}{kit} to use. \l{Kits}{kit} to use. \endlist Expand Down 3 changes: 1 addition & 2 deletions 3 doc/qtcreator/...