Qt中的Q_D宏和d指针】的更多相关文章

_ZTS7QObject 一.Q_D的在文件中的提法 Q_D的设置意在方便地获取私有类指针,文件为qglobal.h.下面的##是宏定义的连字符.假设类名是A,那么A##Private翻译过来就是APrivate. #define Q_D(Class) Class##Private * const d = d_func() d_func()函数如下实现: #define Q_DECLARE_PRIVATE(Class) \ inline Class##Private* d_func() { re…
1. Q_PROPERTY Qt提供了一个绝妙的属性系统,Q_PROPERTY()是一个宏,用来在一个类中声明一个属性property,由于该宏是qt特有的,需要用moc进行编译,故必须继承于QObject类. Q_PROPERTY(type name READ getFunction [WRITE setFunction] [RESET resetFunction] [NOTIFY notifySignal] [DESIGNABLE bool] [SCRIPTABLE bool] [STORE…
在研究QCoreApplication类的代码时,无意间弄明白了“d_func()”和“d指针”的来源: class Q_CORE_EXPORT QCoreApplication#ifndef QT_NO_QOBJECT : public QObject#endif{ …… Q_DECLARE_PRIVATE(QCoreApplication)public: …… ~QCoreApplication(); ……protected: QCoreApplication(QCoreApplicatio…
Qt为了使其动态库最大程度上实现二进制兼容,引入了d指针的概念. 那么为什么d指针能实现二进制兼容呢? 为了回答这个问题,首先弄清楚什么是二进制兼容? 所谓二进制兼容动态库,指的是一个在老版本库下运行的程序,在不经过编译的情况下,仍然能够在新的版本库下运行:需要经过编译才能在新版本下运行,而不需要修改该程序源代码,我们就说该动态库是源代码兼容的.要使一个dll能达到二进制兼容,对于一个结构,对于一个对象,其数据模型应该不变,若有变动,比如在类中增加数据成员或删除数据成员,其结果肯定影响对象的数据…
首先看代码,我在Helloworld中添加两个函数. void HelloWorld::addTarget(){ Size visibleSize = Director::getInstance()->getVisibleSize(); auto target = Sprite::create(, , , )); int cSizeH = target->getContentSize().height; int cSizeW = target->getContentSize().widt…
初学qt,对其ui指针和this指针产生疑问,画了个把小时终于搞懂了. 首先看ui指针的定义: 在mainwindow.h中 private: Ui::MainWindow *ui; Ui又是什么? 同在mainwindow.h namespace Ui { class MainWindow; } 本体是ui_mainwindow.h中: namespace Ui { class MainWindow: public Ui_MainWindow {}; } // namespace Ui 也就是…
Qt中的智能指针-QPointer .当其指向的对象被销毁时,它会被自动置空 .析构时不会自动销毁所指向的对象-QSharedPointer .引用计数型智能指针 .可以被自由的拷贝和赋值 .当引用计数为0时才删除指向的对象 #include <QPointer> #include <QDebug> using namespace std; class Test : public QObject //在进行Qt开发时,所定义的类都必须继承自Qt中的顶层父类QObject,这样才符合…
老猿Python博文目录 老猿Python博客地址 在我们查阅Qt的文档资料时,可以看到Qt中的链表使用的是QList,字符串使用的是QString,但老猿在测试时发现这两个类型PyQt不支持,无法找到导入模块.实际上PyQt使用了Python的可迭代类型如list类型替换了QList,str替换了QString. 另外,对于C语言支持的指针和引用,在Python中无对应类型,因此PyQt实现时,是将这两者直接使用去除指针和引用的变量的数据类型替换,如int * 使用int替换. 所以如果在Qt…
Qt 源码中有很多Q_Q和Q_D宏,使用这些宏的地方总会看到有q指针和d指针,查了查KDE文档,大体搞清了其中的机理,欧也!Qt的这些私有数据访问策略还是挺值得借鉴.下面就简单总结一下. 访问器 , `7 {$ C! D6 g( X发了点牢骚,Qt的成员变量get访问器命名实在有点难以接受,get访问器和成员变量名一样,不像Bean的风格,有些编译器甚至通不过.命名的时候就还是加上get好点,习惯成自然,郁闷. 5 q' i- z) F# s6 U( O0 ZD-指针 ) D3 l6 Q: W;…
最简单的写法: 12345 static MyClass* MyClass::Instance(){ static MyClass inst; return &inst;} 过去很长一段时间一直都这么写,简单粗暴有效.但是直接声明静态对象会使编译出的可执行文件增大,也有可能出现其他的一些问题,所以利用了Qt自带的智能指针QScopedPointer和线程锁QMutex,改成了需要时才动态初始化的模式: 12345678910111213 static MyClass* MyClass::Inst…