




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、QT主要内容 QT简介 QT桌面应用程序工程的建立 QT开发环境必知要点 HelloWorld程序 升级版Hello World程序 QT中的类 信号和槽 两个简单的例子QT简介 Qt是一个1991年由奇趣科技开发的跨平台C+图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。Qt的简介19901991199419992001Haavard 和Eirik灵感闪现开始设计,并提出信号和槽的概念
2、1993开发出Qt的第一个图形核心命名为Qt,并建立“奇趣科技”1995签订第一个合同,开始快速发展。1997Qt1.2发布, 并且用于开发KDE。Qt 2.0发布Qt 3.0发布。2005Qt 4.0发布2008Nokia收购奇趣科技2012Digia收购QTQt的跨平台桌面平台WindowsMac OS XLinux/Unix X11Qt的跨平台嵌入式平台Windows CESymbianAndroid嵌入式LinuxQT桌面应用程序工程的建立 点击文件,选择新建文件或项目QT桌面应用程序工程的建立 选择应用程序,Qt Widgets Application,然后点击选择。QT桌面应用程序
3、工程的建立 设置工程的名字和路径QT桌面应用程序工程的建立 设置工程的编译器,及构建目录QT桌面应用程序工程的建立 设置工程中类的名字及其基类QT桌面应用程序工程的建立 点击完成。QT开发环境必知要点当前工程中的文件:当前工程中的文件:QT_为工程配置为工程配置文件;头文件;源文件;文件;头文件;源文件;界面文件界面文件。配置当前工程的构建环境;运行配置当前工程的构建环境;运行环境;编辑器的特性;代码风格环境;编辑器的特性;代码风格QT开发环境必知要点设置构建后工程的存放路径。设置构建后工程的存放路径。QT开发环境必知要点构建程序,即编译链接程序。构建程序,即编译链接程序
4、。调试程序;在行号的左边双击鼠标设置断点,或按调试程序;在行号的左边双击鼠标设置断点,或按F9设置断点。设置断点。运行程序。运行程序。HelloWorld程序通过编辑界面文件实现双击界面文件中的双击界面文件中的mainwindow.ui便出现图便出现图形界面编辑界面形界面编辑界面控件列表控件列表主窗口界面主窗口界面当前界面中包含当前界面中包含的所有控件的所有控件被选中控件的所被选中控件的所有属性列表,可有属性列表,可以在这里编辑各以在这里编辑各种属性。种属性。编辑信号和槽编辑信号和槽Hello World程序通过编辑界面文件实现将将label控件拖到主界面的控件拖到主界面的合适位置,双击修改它
5、显合适位置,双击修改它显示的内容为示的内容为Hello World!Hello World程序通过编辑界面文件实现构建并运行程序构建并运行程序Hello World程序通过添加代码实现:通过添加代码实现:在在main函数中添加方函数中添加方框的语句框的语句。#include #include int main(int argc, char *argv) QApplication a(argc, argv); MainWindow w; QLabel label(Hello World!,&w); w.show(); return a.exec();升级版Hello World程序通过编辑界面文
6、件实现向主界面中拖放一个向主界面中拖放一个label控件和两个按钮控件,双控件和两个按钮控件,双击修改他们显示的内容。击修改他们显示的内容。在属性列表中将在属性列表中将“显示显示”按钮的按钮的objectname改为:改为:show;将隐藏按钮的;将隐藏按钮的objectname改为:改为:hide。升级版Hello World程序通过编辑界面文件实现点击绿色的加号,添加信点击绿色的加号,添加信号和槽的关联。号和槽的关联。第一个信号和槽的关联:第一个信号和槽的关联:发出者为发出者为show按钮,信号按钮,信号为为clicked(), 接收者为接收者为label,槽函数为,槽函数为show()。
7、第一个信号和槽的关联:第一个信号和槽的关联:发出者为发出者为hide按钮,信号按钮,信号为为clicked(), 接收者为接收者为label,槽函数为,槽函数为hide()。升级版Hello World程序通过编辑界面文件实现程序运行后,可以通过显示按钮显示程序运行后,可以通过显示按钮显示Hello world,通过隐藏按钮隐藏,通过隐藏按钮隐藏Hello World。升级版Hello World程序通过代码实现#include mainwindow.h#include #include #include int main(int argc, char *argv) QApplication
8、a(argc, argv); MainWindow w; QLabel label(Hello World!,&w); label.move(60,40); QPushButton btn1(&w); btn1.move(40,70); QPushButton btn2(&w); btn2.move(150,70); btn1.setText(Hide); QObject:connect(&btn1,SIGNAL(clicked(),&label,SLOT(hide(); QObject:connect(&btn2,SIGNAL(clicked(),&label,SLOT(show(); bt
9、n2.setText(Show); w.resize(300,300); w.show(); return a.exec();QT应用程序开发须知通过鼠标点击创建好一个QT应用程序的工程时,我们已经得到一个可以运行的QT程序,但这个程序仅仅是一个“毛培房”。我们需要在工程中添加实现指定目标的类的代码,并修改界面文件,来完成一个实现具体功能的QT程序。贴地板,贴地板,粉刷墙,粉刷墙,桌椅,灯桌椅,灯等。等。添加实现添加实现计算器的计算器的代码,并代码,并修改界面。修改界面。QT应用程序开发须知在添加代码和控件时,需要解决的问题:如何使代码接收到控件的输入?如何将逻辑功能代码执行的结果反馈到控件?
10、如何使一个控件的改变可以影响另一个控件?信号和槽信号和槽QT应用程序开发须知从前面的列子可知:标签控件对应Qlabel类,下压式按钮对应QPushButton类,另外还有QApplication类和QMainWindow类,那么QT里面有些什么类?它们之间有关系吗?类的继承图类的继承图QT自带的帮助文档自带的帮助文档QObject类大多数大多数Qt类的基类类的基类QObjectQObject是是QtQt对象模型的中心。这个模型的中心特征就是对象模型的中心。这个模型的中心特征就是一种用于无缝对象通讯的被叫做一种用于无缝对象通讯的被叫做信号和槽信号和槽的非常强大的机的非常强大的机制。你能够使用制。
11、你能够使用connect()connect()把信号和槽连接起来把信号和槽连接起来并且可以并且可以用用disconnect()disconnect()来破坏这种连接来破坏这种连接。用户自定义的类要支持信号和槽机制必须继承用户自定义的类要支持信号和槽机制必须继承QObject或或它的子类。它的子类。QWidget类QWidget类是所有用户界面对象的基类。类是所有用户界面对象的基类。 窗口部件是用户界面的一个原子:窗口部件是用户界面的一个原子:它从窗它从窗口系统接收鼠标、键盘和其它事件,并且口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己的表现在屏幕上绘制自己的表现。每一个窗口部。每一个窗口
12、部件都是矩形,并且它们按件都是矩形,并且它们按Z轴顺序排列的。轴顺序排列的。一个窗口部件可以被它的父窗口部件或者一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。它前面的窗口部件盖住一部分。QMainWindow类QMainWindow 类提供类提供一个有菜单条、锚接一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应窗口(例如工具条)和一个状态条的主应用程序窗口用程序窗口。主窗口通常用在提供一个大主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制的中央窗口部件(例如文本编辑或者绘制画布)以及周围菜单、工具条和一个状态画布)以及周围菜单、工具条和一个状态条条。QMai
13、nWindow常常被继承,因为这使常常被继承,因为这使得封装中央部件、菜单和工具条以及窗口得封装中央部件、菜单和工具条以及窗口状态变得更容易。继承使创建当用户点击状态变得更容易。继承使创建当用户点击菜单项或者工具条按钮时被调用的槽成为菜单项或者工具条按钮时被调用的槽成为可能。你也可以使用可能。你也可以使用Qt设计器来创建主窗设计器来创建主窗口。口。QDialog类QDialog类是对话框窗口的基类。类是对话框窗口的基类。对话框窗口对话框窗口是主要用于短期任务以及和用户进行简要通是主要用于短期任务以及和用户进行简要通讯的顶级窗口讯的顶级窗口。QDialog可以是模式的也可以可以是模式的也可以是非
14、模式的是非模式的。QDialog支持扩展性并且可以提支持扩展性并且可以提供返回值。它们可以有默认按钮。供返回值。它们可以有默认按钮。信号信号-槽(槽(Signal-Slot)机制)机制信号和槽机制是信号和槽机制是 QT 的核心机制的核心机制,要精通,要精通 QT 编程就必须对信号编程就必须对信号和槽有所了解。和槽有所了解。信号和槽是一种高级接口,应用于对象之间的信号和槽是一种高级接口,应用于对象之间的通信,它是通信,它是 QT 的核心特性的核心特性,也是,也是 QT 区别于其它工具包的重要区别于其它工具包的重要地方。信号和槽是地方。信号和槽是 QT 自行定义的一种通信机制,它自行定义的一种通信
15、机制,它独立于标独立于标准的准的 C/C+ 语言语言,因此要,因此要正确的处理信号和槽,必须借助一个正确的处理信号和槽,必须借助一个称为称为 moc(Meta Object Compiler)的)的 QT 工具工具,该工具是一个,该工具是一个 C+ 预处理程序,它为高层次的事件处理自动生成所需要的附预处理程序,它为高层次的事件处理自动生成所需要的附加代码。加代码。 所有从所有从 QObject 或其子类或其子类 ( 例如例如 Qwidget) 派生的类都能够派生的类都能够包含信号和槽包含信号和槽。当对象改变其状态时,信号就由该对象发当对象改变其状态时,信号就由该对象发射射 (emit) 出去,
16、这就是对象所要做的全部事情,它不知道出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号另一端是谁在接收这个信号。这就是真正的信息封装,它。这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。确保对象被当作一个真正的软件组件来使用。槽用于接收槽用于接收信信 号,但它们是普通的对象成员函数号,但它们是普通的对象成员函数。一个槽并不知道是一个槽并不知道是否有任何信号与自己相连接否有任何信号与自己相连接。而且,对象并不了解具体的。而且,对象并不了解具体的通信机制。通信机制。 信号信号-槽(槽(Signal-Slot)机制)机制用户可以按照需要用户可以按照需要将许多信号与一个
17、单独的槽函数相联系将许多信号与一个单独的槽函数相联系,一个信号也可以按需要被联系到很多不同的槽函数一个信号也可以按需要被联系到很多不同的槽函数。甚。甚至还可以将至还可以将一个信号直接与另一个信号相联系一个信号直接与另一个信号相联系,这样当第,这样当第一个信号被发出时立刻发出第二个信号。一个信号被发出时立刻发出第二个信号。信号信号-槽(槽(Signal-Slot)机制)机制信号信号-槽(槽(Signal-Slot)机制)机制信号当某个信号对其客户或所有者发生的内部状态发生改变,信当某个信号对其客户或所有者发生的内部状态发生改变,信号被一个对象发射。只有号被一个对象发射。只有 定义过这个信号的类及
18、其派生类能定义过这个信号的类及其派生类能够发射这个信号。当一个信号被发射时,与其相关联的槽将够发射这个信号。当一个信号被发射时,与其相关联的槽将被立刻执行,就象一个正常的函数调用一样。信号被立刻执行,就象一个正常的函数调用一样。信号 - - 槽机制槽机制完全独立于任何完全独立于任何 GUI GUI 事件循环。只有当所有的槽返回以后发事件循环。只有当所有的槽返回以后发射函数(射函数(emitemit)才返回。)才返回。 如果存在多个槽与某个信号相关联如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地,那么,当这个信号被发射时,这些槽将会一个接一个地 执执行,但是它们
19、执行的顺序将会是随机的、不确定的,我们不行,但是它们执行的顺序将会是随机的、不确定的,我们不能人为地指定哪个先执行、哪能人为地指定哪个先执行、哪 个后执行。个后执行。 信号信号-槽(槽(Signal-Slot)机制)机制信号信号的声明是在头文件中进行的,信号的声明是在头文件中进行的,QT QT 的的 signals signals 关键字关键字指出进入了信号声明区,随后即可指出进入了信号声明区,随后即可 声明自己的信号。例如声明自己的信号。例如,下面定义了三个信号:,下面定义了三个信号: signals: void mySignal(); void mySignal(int x); void
20、mySignalParam(int x,int y); signals 是是 QT 的关键字,而非的关键字,而非 C/C+ 的。的。 信号定义与函数的声明一致,但信号定义的返回信号定义与函数的声明一致,但信号定义的返回 类型都是类型都是 void 且无需为信号定义函数体且无需为信号定义函数体(信号由信号由 moc moc 自动产生自动产生 )。信号信号-槽(槽(Signal-Slot)机制)机制槽槽是普通的槽是普通的 C+ 成员函数(槽可以重载,可以为虚函数)成员函数(槽可以重载,可以为虚函数),可以被正常调用,它们唯一的特殊性就是很多信号可以,可以被正常调用,它们唯一的特殊性就是很多信号可以
21、与其相关联。当与其关联的信号被发射时,这个槽就会被与其相关联。当与其关联的信号被发射时,这个槽就会被调用。槽可以有参数,但槽的参数不能有缺省值。调用。槽可以有参数,但槽的参数不能有缺省值。 槽是普通的成员函数,因此与其它的函数一样,它们也有存槽是普通的成员函数,因此与其它的函数一样,它们也有存取权限。槽的存取权限决定了谁能够与其相关联。同普通的取权限。槽的存取权限决定了谁能够与其相关联。同普通的 C+ 成员函数一样,槽函数也分为三种类型,即成员函数一样,槽函数也分为三种类型,即 public slots、private slots 和和 protected slots。 信号信号-槽(槽(Si
22、gnal-Slot)机制)机制槽public slots:在这个区内声明的槽意味着任何对象都可将:在这个区内声明的槽意味着任何对象都可将信号与之相连接。这对于组件编程非常有用,你可以创建彼信号与之相连接。这对于组件编程非常有用,你可以创建彼此互不了解的对象,将它们的信号与槽进行连接以便信息能此互不了解的对象,将它们的信号与槽进行连接以便信息能够正确的传递。够正确的传递。protected slots:在这个区内声明的槽意味着当前类及其子:在这个区内声明的槽意味着当前类及其子类可以将信号与之相连接。这适用于那些槽,它们是类实现类可以将信号与之相连接。这适用于那些槽,它们是类实现的一部分,但是其界
23、面接口却面向外部。的一部分,但是其界面接口却面向外部。private slots:在这个区内声明的槽意味着只有类自己可以:在这个区内声明的槽意味着只有类自己可以将信号与之相连接。这适用于联系非常紧密的类。将信号与之相连接。这适用于联系非常紧密的类。信号信号-槽(槽(Signal-Slot)机制)机制槽槽的声明也是在头文件中进行的。例如,下面声明了三个槽:public slots: void mySlot(); void mySlot(int x); void mySignalParam(int x,int y);信号信号-槽(槽(Signal-Slot)机制)机制信号-槽的连接通过调用通过调用
24、 QObject 对象的对象的 connect 函数来将某个对象的信号函数来将某个对象的信号与另外一个对象的槽函数相关联,这样当发射者发射信号时与另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用。该函数的定义如下:,接收者的槽函数将被调用。该函数的定义如下: bool QObject:connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) QLabel *label = new QLabel; QScrollBar *s
25、croll = new QScrollBar; QObject:connect( scroll, SIGNAL(valueChanged(int), label, SLOT(setNum(int) ); 信号信号-槽(槽(Signal-Slot)机制)机制信号-槽的断开当信号与槽没有必要继续保持关联时,我们可以使用当信号与槽没有必要继续保持关联时,我们可以使用 disconnect 函数来断开连接。其定义如下:函数来断开连接。其定义如下: bool QObject:disconnect ( const QObject * sender, const char * signal, const O
26、bject * receiver, const char * member ) 信号信号-槽(槽(Signal-Slot)机制)机制信号-槽的断开断开与某个对象相关联的任何对象。 disconnect( myObject, 0, 0, 0 ) 断开与某个特定信号的任何关联。 disconnect( myObject, SIGNAL(mySignal(), 0, 0 ) 断开两个对象之间的关联。 disconnect( myObject, 0, myReceiver, 0 ) 显示表达式及计算结果显示表达式及计算结果输入表达式和清除表达式输入表达式和清除表达式输出:定义使文本框内容发输出:定义使
27、文本框内容发生改变的信号。生改变的信号。接收输入:定义各个按钮对接收输入:定义各个按钮对应的槽函数。应的槽函数。计算表达式的值计算表达式的值12345应用举例:应用举例:class Calculator : public QObject Q_OBJECTpublic: explicit Calculator(QObject *parent = 0);signals: void already(QString);public slots: void addOne(); void addTwo(); void addPlus(); void equal();private: int Calcula
28、te(); QString exp; QList listexp; QString tempNum;计算器类的定义:计算器类的定义:计算器类成员函数的定义:计算器类成员函数的定义:void Calculator:addSeven() exp+=7; tempNum+=7; emit already(exp);voidvoid CalculatorCalculator:addPlus():addPlus() exp+=+; listexp.push_back(tempNum); listexp.push_back(+); tempNum=; emit already(exp);void Calculator:equal() exp+=; listexp.push_back(tempNum); listexp.push_back(=); tempNum=; exp+=QString:number(Calculate(); emit already(exp);界面的精确设计界面的精确设计:(通过界面设计器或直接编码):(通过界面设计器或直接编码)1. 进一步合理安排各个控件的布局。进一步合理安排各个控件的布局。2. 设计各个控件的名字,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 计算机操作工模考试题与答案
- 用电客户受理员练习题+答案
- 车工高级工练习题库及答案
- 山东省济宁市邹城市2024-2025学年高二下学期4月期中生物试题 (原卷版+解析版)
- 航空器维修工程中的技术创新与转化考核试卷
- 水果和坚果加工的食品安全与质量控制考核试卷
- 石棉材料的断裂性能测试考核试卷
- 涂料门店销售数据化管理考核试卷
- 笔的制造业商业模式创新与案例分析考核试卷
- 烟草制品零售企业盈利模式分析考核试卷
- 2025(统编版)语文二年级下册第三单元解析+任务目标+大单元教学设计
- 17J008挡土墙(重力式、衡重式、悬臂式)图示图集
- 侵权责任法知到智慧树章节测试课后答案2024年秋三亚学院
- 食堂盒饭配送方案(5篇)
- 2025年中考数学二轮复习《压轴题》专项练习(一)(含答案)
- 网格员安全培训
- Environmental Biotechnology知到智慧树章节测试课后答案2024年秋哈尔滨工业大学
- 华中师范大学教育技术学硕士研究生培养方案
- 内部审计学第3版 张庆龙 教学大纲
- 《珠三角地区环境质量与经济发展的实证探究》8800字(论文)
- 中医科医生岗位招聘面试题及回答建议(某大型央企)2025年
评论
0/150
提交评论