friendclassClass##Private;#defineQ_DECLARE_PUBLIC(Class) \ inline Class* q_func() { return static_cast<Class *>(q_ptr); } \inlineconstClass* q_func()const{returnstatic_cast<constClass *>(q_ptr); } \ friendclassClass;#defineQ_D(Class) Class##Private * const d = d_func()#define...
注意:虽然Q_DECLARE_PUBLIC宏在这里被提及,但在实际的Qt代码中,你通常不需要直接使用它来声明q_ptr。q_ptr是Pimpl模式的一部分,通常手动声明,并通过构造函数或其他方式设置。Q_DECLARE_PUBLIC宏更多地是在Qt内部或特定情况下使用,以支持元对象系统或其他高级功能。 实际应用 这两个宏的结合使用,使得Qt的类设计既...
在这个例子中,Q_DECLARE_PUBLIC宏在MyClassPrivate的公共部分声明了一个名为“q_ptr”的指针,该指针指向MyClass类型。这样,我们就可以在MyClassPrivate的实现文件中通过“q_ptr”来访问MyClass中的成员函数和变量了。 使用Q_DECLARE_PRIVATE和Q_DECLARE_PUBLIC的好处 减少头文件依赖:通过将实现细节隐藏在私有实现类中...
Q_DECLARE_PUBLIC宏和Q_Q宏配合用来在私有类中访问主类对象 Q_DECLARE_PUBLIC宏和Q_Q宏#defineQ_DECLARE_PUBLIC(Class) \ inline Class* q_func() { return static_cast<Class *>(q_ptr); } \ inline const Class* q_func() const { return static_cast<const class*>(q_ptr); } \ friend class...
在private 类 MyObjectPrivate 中,通过构造函数将主类 MyObject 的指针传给 q_ptr。然后我们使用类似主类中使用的 Q_DECLARE_PRIVATE 的宏一样的另外的宏 Q_DECLARE_PUBLIC。这个宏所做的就是让你能够通过 Q_Q(Class) 宏使用主类指针。与 D-Pointer 不同,这时候你需要使用的是 Q_Pointer。这两个是完全相...
Q_OBJECT Q_PROPERTY(QString objectName READ objectName WRITE setObjectName NOTIFY objectNameChanged) Q_DECLARE_PRIVATE(QObject) public: Q_INVOKABLE explicit QObject(QObject *parent=Q_NULLPTR); virtual ~QObject(); ... ... protected:
Q_DECLARE_PRIVATE(QObject) public: Q_INVOKABLE explicit QObject(QObject *parent=nullptr); virtual ~QObject(); //... protected: QObject(QObjectPrivate &dd, QObject *parent = nullptr); //... protected: QScopedPointer<QObjectData> d_ptr; ...
创建QApplication实例。 构建和显示应用程序的主界面。 进入事件循环。 #include <QApplication>#include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QLabel label("Hello, world!");label.show();return app.exec();} ...
classQ_CORE_EXPORT QObjectPrivate :publicQObjectData { Q_DECLARE_PUBLIC(QObject) public: QObjectPrivate(intversion = QObjectPrivateVersion); virtual~QObjectPrivate(); // others } 1. 2. 3. 4. 5. 6. 7. 8. 9. 这个类是继承 QObjectData 的!想想也是,因为我们说过,QObjectData 是不能被实...
public: Q_DECLARE_PUBLIC(MyQFileSystemModel) MyQFileSystemModel *q_ptr; }; QT_END_NAMESPACE #endif // MYQFILESYSTEMMODEL_P_H 这里面需要尤其注意的是,MyQFileSystemModel *q_ptr;这一行是不能少的。c++的static_cast是对被转换的类型有限制的。如果B类继承了A类,那么从B类转换成A类是完全没有问题的。但...