【Qt】qt库结构及示例
QT库结构
Qt图形库是一个组织严谨的C++类库,其结构如图所示
细说Qt库
Qt类库中包含了上百个类,结构十分复杂,上图展示了Qt_3.2类库的基本结构。
Qt类库中的类可以分成两种类型:
-
一种是直接或者继承自Qt类
-
另一种是独立的,不从任何类集成
独立的类在Qt库中一般用来完成独立的功能,例如操作XML文件的QXmlReader类。
直接从从Qt类继承的类主要可以分成QObject类和QEvent类。QObject类是所有应用组件的基类,QEvent类是所有QT事件响应类的基类。其他的还有QCursor、QPen、QTab等类描述的窗口组件可以在窗体的任意地方出现,因此直接从Qt基类继承。
QWidget类是组件容器,所有可以结合在一起的组件都从该类继承。QWidget类继承自QObject类,因为所有的窗体组件都是应用组件的一部分。
Qt类库组织合理,在使用的时候按照类的集成关系操作。如QButton、QSlider等组件可以被加入到QWidget对象中,而QProcess、QTimer组件是不能加入到QWidget对象中的。
示例效果
工程源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | /* *功能:滑动Slider控件的滑块时,Spin控件的数值相应改变。同样的,在修改Spin控件值的时候,Slider控件的数值也相应变化 */ #include <qapplication.h> #include <qpushbutton.h> #include <qlayout.h> #include <qslider.h> #include <qspinbox.h> #include <qwidget.h> class MyWidget : public QWidget { public : MyWidget(QWidget *parent=0); //声明MyWidget类的构造函数 }; //注意分号 MyWidget::MyWidget(QWidget *parent):QWidget(parent) { QSpinBox *agenum_sb= new QSpinBox(); agenum_sb->setRange(0,100); agenum_sb->setValue(0); QSlider *agenum_sl= new QSlider(Qt::Horizontal); agenum_sl->setRange(0,100); agenum_sl->setValue(0); connect(agenum_sb,SIGNAL(valueChanged( int )),agenum_sl,SLOT(setValue( int ))); //设置Spin控件修改数值响应函数,将Spin控件改变数值的事件与Slider控件关联 connect(agenum_sl,SIGNAL(valueChanged( int )),agenum_sb,SLOT(setValue( int ))); //设置SLider控件修改数值响应函数,将Slider控件改变数值的事件与Spin控件关联 QHBoxLayout *layout= new QHBoxLayout; //创建列布局的对象 layout->addWidget(agenum_sb); layout->addWidget(agenum_sl); setLayout(layout); //设置MyWidget使用列布局 setWindowTitle( "Enter a number By-Mystery" ); //设置窗体标题 } int main( int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); } |
Qt中信号与槽系统
源码中的connect()函数原型为:connect(boject1, signal, object2, slot);
其中,Object1和Object2分别代表两个不同的Qt对象(继承自QObject基类),signal代表Object的信号,slot代表Object2的槽。
信号和槽是Qt引进的一种处理机制,信号可以被理解为一个对象发出的事件请求,槽是处理信号的函数。
设计信号和槽的机制是为了避免回调函数的缺点。回调函数是一个函数指针,如果希望一个处理函数发出一些通知事件,可以把另一个函数的指针传递给处理函数,处理函数在适当的时候使用函数指针回调通知函数。从回调函数的调用过程可以看出,回调函数存在类型不安全和参数不安全的缺点。因为对于调用函数来说,通过函数指针无法判断出函数的返回类型以及参数类型。
信号和槽能完成回调函数的所有功能,并且信号和槽机制是类型安全的,而且还能完成其他许多复杂的功能。
信号和槽不仅是单一的对应关系,还可以是多对多的关系。一个信号可以被连接到多个槽,一个槽也可以响应多个信号,此外,信号之间也可以被连接。
本文出自 “成鹏致远” 博客,请务必保留此出处http://infohacker.blog.51cto.com/6751239/1199405
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 手把手教你更优雅的享受 DeepSeek
· 腾讯元宝接入 DeepSeek R1 模型,支持深度思考 + 联网搜索,好用不卡机!
· AI工具推荐:领先的开源 AI 代码助手——Continue
· 探秘Transformer系列之(2)---总体架构
· V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库