Qt类库和信号槽

上传人:飞****9 文档编号:127479980 上传时间:2020-04-02 格式:PPT 页数:94 大小:1.95MB
返回 下载 相关 举报
Qt类库和信号槽_第1页
第1页 / 共94页
Qt类库和信号槽_第2页
第2页 / 共94页
Qt类库和信号槽_第3页
第3页 / 共94页
Qt类库和信号槽_第4页
第4页 / 共94页
Qt类库和信号槽_第5页
第5页 / 共94页
点击查看更多>>
资源描述

《Qt类库和信号槽》由会员分享,可在线阅读,更多相关《Qt类库和信号槽(94页珍藏版)》请在金锄头文库上搜索。

1、 4 2 2020 1 Qt类库 Qt类库架构 Qt类库 跨平台的qt包含了大约15个模块接近700个APIs 所有的模块都依赖于QtCore特殊情况 有3个模块依赖具体的平台 QAxContainer QAxServer QtDBus 4 2 2020 3 4 2 2020 4 5 Qt类库 续 4 2 2020 6 Qt主要基类 QObject类 Qt对象模型的核心 QObject类是几乎所有Qt类和所有部件 widget 的基类所有的QWidgets都是QObject提供对象树和对象的关系QObject在整个Qt的体系中处于一个非常重要的位置提供了信号 槽的通信机制对象不允许拷贝 禁用拷

2、贝构造 包含了很多组成Qt的机制事件处理内存管理属性 内省 Introspection 4 2 2020 7 元数据 Metadata Qt用C 实现内省 Introspection 每一个QObject都有一个元对象元对象涉及 类名 QObject className 继承 QObject inherits 属性信号和槽普通信息 QObject classInfo 元数据 元数据通过元对象编译器 moc 在编译时组合在一起 sources cpp executables objectfiles o headers h 普通的C 生成过程 includes compiles links 元数据

3、Metadata 元数据通过元对象编译器 moc 在编译时组合在一起 moc从头文件里面获得数据 sources cpp executables objectfiles o headers h generatedmoc cpp QtC 生成过程 includes compiles links compiles mocs 元数据 moc找什么 classMyClass publicQObject Q OBJECTQ CLASSINFO author JohnDoe public MyClass constFoo 内省 Introspection 类在运行时了解它们自己的信息对实现脚本和动态语言的

4、绑定有很好的支持 if object inherits QAbstractItemView QAbstractItemView view static cast widget view enumCapitalsEnum Oslo Helsinki Stockholm Copenhagen intindex object metaObject indexOfEnumerator CapitalsEnum object metaObject enumerator index key object capital 属性 Properties QObject有getter和setter函数属性命名策略

5、 color setColor对于布尔类型 isEnabled setEnabled classQLabel publicQFrame Q OBJECTQ PROPERTY QStringtextREADtextWRITEsetText public QStringtext const publicslots voidsetText constQString 属性 为什么使用setter函数 可以验证设置对可能的变化作出反应 voidsetMin intnewMin if newMin m max qWarning IgnoringsetMin d asmin max newMin retur

6、n voidsetMin intnewMin m min newMin updateMinimum 属性 为什么使用getter函数 间接的属性 QSizesize const returnm size intwidth const returnm size width 属性 Q PROPERTY typenameREADgetFunction WRITEsetFunction RESETresetFunction NOTIFYnotifySignal DESIGNABLEbool SCRIPTABLEbool STOREDbool USERbool CONSTANT FINAL 属性跟类中数

7、据成员的主要区别必须有一个read函数有一个可选的write函数如果定义了 stored 属性表明这是一直存在的 一个reset函数能够把property设置成其默认状态一个 desinable 属性表明该property能在GUIbuilder 一般为QtDesigner 可见 使用属性 直接获取通过元信息和属性系统在运行时发现属性 QStringtext label text label setText HelloWorld QStringtext object property text toString object setProperty text HelloWorld intQMe

8、taObject propertyCount QMetaPropertyQMetaObject property i QMetaProperty name isConstant isDesignable read write 动态属性 在运行时给对象增加属性可以用来 标识 对象 等等 boolret object setProperty name value QObject dynamicPropertyNames const 创建自定义属性 classAngleObject publicQObject Q OBJECTQ PROPERTY qrealangleREADangleWRITEse

9、tAngle public AngleObject qrealangle QObject parent 0 qrealangle const voidsetAngle qreal private qrealm angle 创建自定义属性 AngleObject AngleObject qrealangle QObject parent QObject parent m angle angle qrealAngleObject angle const returnm angle voidAngleObject setAngle qrealangle m angle angle doSomethi

10、ng 自定义属性 枚举 classAngleObject publicQObject Q OBJECTQ ENUMS AngleMode Q PROPERTY AngleModeangleModeREAD public enumAngleMode Radians Degrees QObject类 续 父子关系 每一个QObject对象都可以有一个指向父亲的参数孩子会通知他的父亲自己的存在 父亲会把它加入到自己的孩子列表中如果一个widget对象没有父亲 那么他就是一个窗口父部件可以 当父部件隐藏或显示自己的时候 会自动的隐藏和显示子部件当父部件enable和disable时 子部件的状态也随之

11、变化注意 在父部件可见的时候 子部件也可以单独隐藏自己 4 2 2020 22 改变所有者 QObject可以修改它所属的父对象 父对象知道何时子对象被删除一系列函数实现返回指针 从其所有者 拿走 释放的数据 把它留给拿取者处理 obj setParent newParent deletelistWidget item 0 删除第一个item 不安全 QLayoutItem QLayout takeAt int QListWidgetItem QListWidget takeItem int SafealternativeQListWidgetItem item listWidget take

12、Item 0 if item deleteitem QObject类 续 内存管理 所有子对象的内存管理都转移给了父对象使用new在堆上分配内存子对象可自动被父对象删除内存手动删除不会引起二次删除 因为子对象删除时会通知父对象没有父对象的QObject对象都需要手动删除一般把这种无父亲的对象分配在栈上 可以避免内存泄露的问题Qt是否有类似于自动回收站的机制 但是事实是没有的 只需要关注对象的父子关系和功能 4 2 2020 24 内存管理 QObject可以有父对象和子对象当一个父对象被删除 它的子对象也同样被删除 QObject parent newQObject QObject child

13、1 newQObject parent QObject child2 newQObject parent QObject child1 1 newQObject child1 QObject child1 2 newQObject child1 deleteparent parent child1 child2 child1 1 child1 2 内存管理 当需要实现视觉层级时使用到它 QDialog parent newQDialog QGroupBox box newQGroupBox parent QPushButton button newQPushButton parent QRad

14、ioButton option1 newQRadioButton box QRadioButton option2 newQRadioButton box deleteparent 使用模式 使用this指针指向最高层父对象在栈上分配父对象空间 voidWidget showDialog Dialogdialog if dialog exec QDialog Accepted Dialog Dialog QWidget parent QDialog parent QGroupBox box QGroupBox this QPushButton button QPushButton this Q

15、RadioButton option1 QRadioButton box QRadioButton option2 QRadioButton box 堆 Heap 当使用new和delete时 内存在堆中分配 堆内存空间必须通过delete完全释放 以防止内存泄漏 只要有需要 分配在堆上的对象可以一直存活下去 new delete 构造Construction 析构Destruction 栈 Stack 局部变量在栈上分配 栈变量超过作用范围时会自动释放 分配在栈中的对象在超出作用范围时总是会被析构 inta 构造Construction 析构Destruction 堆和栈 想要自动内存管理

16、只有父对象需要在栈上分配 MyMainWindow QApplication intmain intargc char argv QApplicationa argc argv MyMainWindoww w show returna exec MyMainWindow MyMainWindow newQLabel this new QObject类 续 创建对象 从QObject继承的对象都使用new在堆上分配空间如果创建对象的时候设置了父对象 父对象就负责管理新创建的对象QLabel label newQLabel SomeText parent 没有从QObject继承的对象则分配在栈上 而不是堆上QStringListlist QColorcolor 例外QFile和QApplication 继承QObject 通常分配在栈上模式对话框常常分配在栈上 4 2 2020 31 构造规范 几乎所有的QObject都有一个默认为空值的父对象 QWidget的父对象是其它QWidget类为了方便倾向于提供多种构造 包括只带有父对象的一种 父对象通常是带缺省值的第一个参数 QLabel

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号