




已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,主讲老师:欧阳坚,欢迎您到(千锋学院)来学习!创建QtGui程序,.,内容摘要,Qt介绍安装Qt库及其开发工具创建HelloWorld程序信号槽机制介绍布局介绍使用QtDesigner创建与响应菜单实例:chat,.,Qt简介,Qt是一个创建跨平台C+图形程序的开发框架最初由Trolltech开发,现已被Nokia收购跨平台能力强,一次编写,处处编译出色的开发工具集,可以与多种IDE集成开发快速,利于为企业提高生产效率易于使用,让开发人员把更多的精力集中在问题本身类库功能强大,数百个类,几千个函数丰富的在线文档和QtAssistant社区活跃,众多可用的开源工程有开源版本和商业版本,.,Qt简介,最初由HaavardNord和EirikChambe-Eng开发1991开始开发,第二年引入了信号槽机制1993实现了第一个图形核心,可以用来创建控件1995第一次发布,可以在unix和windows上运行1997MatthiasEttrich决定使用Qt创建KDE桌面使得Qt成为了Linux图形程序开发的事实标准2000Qt/EmbeddedLinux发布,使用一个轻量级的,依赖X11的桌面系统2000年底,Qtopia发布,专为手机和PDA设计2001Qt3.0发布,第二年获得JoltProductivityAward,.,Qt简介,2005Qt4.0发布,拥有约500个类和9000多个函数现已提供c+,c#,java和python等多种语言开发的API2008年被Nokia收购,开始向S60移植当前最新版本是Qt4.5,.,Qt简介,Qt在当前多数主流平台上提供支持windows98-vistaMacOSXLinuxSolaris,HP-UX和其它基于X11的UnixQt/EmbeddedLinux桌面程序库的超集,不使用X11Qtopia用于移动电话和PDAmaemo正在开发当中SymbianS60正在开发当中,.,Qt简介,Qt在工业生产和日常生活的各个领域广泛应用KDE桌面系统和其上的大多数应用程序AdobePhotoshopAlbum动画制作工具数字电影处理EDA软件(电子设计自动化)油气探测金融服务医学影像,.,Qt简介,大多数应用程序都可以单独使用Qt开发丰富的窗口控件,布局管理,文字排列和外观风格用户事件响应:键盘,鼠标点击和拖放信号槽机制,一种简单的对象间通信的方式文件操作和输入输出操作数据库支持,多线程和网络编程XML的SAX和DOM方式解析2D/3D图形支持QPainter和OpenGL,framebuffer国际化和本地化的支持插件和脚本允许用户进行扩展,.,Qt简介,强大的开发工具QtAssistant和在线文档,为开发人员提供了各个类和方法的详细信息和相互关系QtDesigner可视化的图形设计器,可以绘制复杂的界面,经生成c+代码后可以方便的在工程中使用,省去大多数设计界面的时间。设计出的界面控件和相关属性修改方便QtLinguist可以为Qt添加语言翻译设置Qt程序在本机的偏好System-Preferrences-Qt4Setting,.,Qt简介,.,Qt简介,.,Qt安装,.,HelloWorld,.,HelloWorld,qmake-project生成当前目录同名,后缀为.pro的文件生成Makefilemake生成目标文件和可执行程序makeclean清理中间目标文件,.,HelloWorld,用鼠标点击或在命令行里运行,.,HelloWorld,QApplication是QtGUI应用程序框架,有且只有一个,负责整个Qt程序的控件流程和主要设置根据用户的桌面设置来初始化字体,调色板和双击间隔等变量,并动态跟踪变化从底层的窗口系统接收事件,并正确的分发给相应的控件方法有sendEvent和PostEvent提取分析命令行参数exec执行后,程序进入事件循环,等待事件发生,直到exit接收系统事件或用户事件,并分发给相应的处理函数quit方法里面会调用exit,当某些控件被点击时可能触发非GUI程序可以使用QCoreApplication,不依赖图形库,.,HelloWorld,初始化,等待事件,处理事件,系统事件,系统事件,exec,事件发生,处理完成,QApplication的状态转换,程序结束,结束事件,.,HelloWorld,鼠标,驱动,窗口系统,标签,产生中断,左键按下,QApplication,清除窗口区域,发送信号,QApplication,发送信号,窗口系统,驱动,显示窗体下面的图形,.,信号槽机制,.,信号槽机制,SIGNAL和SLOT是分别指定信号和槽的宏connect方法把按钮的clicked()信号和程序的quit()槽连接起来当按钮被按下时,clicked()信号被发射主程序的quit()已连接上click(),能接收到这个信号并响应clicked()信号由按钮的事件处理方法发射信号传递到槽的过程由Qt程序框架来维护clicked()信号发出后,quit()槽内的代码被触发执行若信号与槽没有连接,信号发射后,槽不会被触发disconnect方法用于断开连接,.,信号槽机制,对象之间通信的一种方式观察者模式的一种特殊实现信号与槽都是普通函数可以在多线程中使用相比与回调函数:类型安全,松散藕合编译器会检查类型,信号与槽的参数类型必须相同槽的参数可以较小,忽略多余参数Qt的信号槽机制会保证信号发出后,槽在适当的时机执行一个信号可以连接多个槽多个信号可以连接到相同的槽一个信号可以连接到另一个信号,.,信号槽机制,所有继承自QObject和其子类的类都可以含有信号和槽,.,信号槽机制,继承自QObject的类必须包含Q_OBJECT宏槽就像一个普通的成员函数一样实现setValue函数中发射了一个信号valueChanged,.,信号槽机制,信号由moc自动产生用户不能在.cpp文件中实现信号信号的返回值必须是void只有定义了信号的类及其子类可以发射信号发射信号后,Qt框架会把信号的参数传递给槽连接到信号的所有槽都执行完成后,再执行emit后面语句如果一个信号连接到多个槽,各个槽执行顺序不确定经验表明,信号的参数越少复用性越好,.,信号槽机制,槽可以像普通成员函数一样调用当槽和信号连接时,槽的访问控制会被忽略把槽定义成虚函数,用处会比较广泛寻找正确槽并执行的时间,是普通函数调用的10倍但是远比new和delete操作消耗小使用信号映射管理器来简化代码练习:在Counter示例上新加一个信号和槽当counter计数到时,发出一个信号bigEnoungh在另外一个类的槽内输出一句话:upto8,.,常用控件,控件都继承自QWidget用QtAssistant查看所有的控件和相关的信号槽等信息,.,布局管理,使用组合模式来管理界面程序中的所有控件容器和控件之间形成一种父子关系,主窗体,容器控件,按钮,标签,编辑框,.,布局管理,各个控件显示在哪个位置?大小?拉伸时会不会出现不希望的变形?压缩时会不会互相遮盖?在不同的风格下会不会出现变形?一行文字会不会被截断?方法1:指定绝对位置容易出现问题方法2:每次计算相对位置编码繁琐容易发生计算错误,.,布局管理,Qt提供了预定义的布局管理器父控件安装管理器,用于设置各个子控件的位置和大小QHBoxLayout各个控件水平排列,从左到右QVBoxLayout各个控件从上到下垂直排列QGridLayout把空间划分成风格,每个控件占据几个格子layout-addWidget(widget,row,column,rowSpan,columnSpan);addStretch()方法使用空白来占据空间QWidget:setLayout用于设置布局管理器窗口大小发生变化时,管理器自动设置子控件大小和位置框架根据布局,自动的设置父子控件关系,.,布局管理,.,布局管理,练习:在示例的基础之上增加一个OK按键改成使用垂直布局:spinbox,sliderbar,pushbutton按OK后退出程序,.,创建对话框,自定义对话框类要继承QDialog演示程序FindDialog,.,创建对话框,创建FindDialog,继承自QDialog(Q_OBJECT)实现构造函数,组合各个子控件,搭建对话框写主函数,编译运行在类FindDialog中添加信号和槽连接相应的信号和槽编译运行,.,创建对话框,创建对话框一般有五个步骤:创建并初始化各个子控件布局各个子控件设置Tab键顺序建立信号和槽之间的连接实现对话框自己的槽,.,使用QtDesigner,使用QtDesinger创建对话框使用Widget或对话框模板创建一个窗体,.,使用QtDesigner,使用对话框模板创建窗体,.,使用QtDesigner,添加需要的控件和空间,.,使用QtDesigner,添加布局管理器,.,使用QtDesigner,添加全局的布局管理器,.,使用QtDesigner,调整大小,.,使用QtDesigner,为标签指定伙伴,.,使用QtDesigner,指定各个控件的Tab顺序,.,使用QtDesigner,连接信号槽,.,使用QtDesigner,保存findbox.ui并编译后生成ui_findbox.h创建类Findbox继承自QDialog和ui:Findbox在findbox.cpp中实现Findbox类构造函数中使用setupUi来使用设计出的来窗体,.,使用QtDesigner,当用户输入文字时,OK按钮变得可用当用户删除文字时,OK按钮变得不可用,.,使用QtDesigner,实现自己的槽把编辑框的信号和我们的槽连接起来,.,使用QtDesigner,拉伸findbox,观察布局管理与大小策略的影响,.,使用QtDesigner,Fixed:无法伸缩Minimum:显示最小大小,不能缩小,必要时可以拉伸Maximum:显示最大大小,不能拉伸,必要时可缩小Preferred:显示最佳大小,必要时可以拉伸Expanding:可以根据意愿伸缩,.,使用QtDesigner,伸展度决定当整个窗体被拉伸或压缩时,各个控件伸缩的比例,.,菜单与行为,把菜单和选择后执行的操作分离开命令模式:动作的执行和触发动作的地方分开多个菜单可以使用同一个动作,复用度高,易于修改QAction:行为,动作.可以与菜单,工具条或快捷键绑定行为具有标签(icon)菜单文字(menutext)快捷键(shortcut)状态文字(statustext)这是什么WhatsThis?“tooltip,.,菜单与行为,set系列方法可用来设置行为的各个属性行为被触发后会发出triggered()信号创建完成行为后把triggered()信号连接到相关的槽,.,菜单与行为,菜单是一种特殊控件,继承自QWidget下拉菜单放在菜单栏里面的项上下文相关菜单根据当前程序不用的状态显示不同的项弹出式菜单被快捷键或鼠标右键触发显示在指定位置菜单可以用popup()异步显示同步显示菜单exec()通过QMenu:addAction方法绑定一个新的行为选中一个菜单后,当前绑定的行为被触发,.,菜单与行为,演示MenuAction练习:加一个新
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年巢湖学院试卷真题及答案
- 西藏2025自考行政管理行政法与行政诉讼法一模拟题及答案
- 广东2025自考老年医学与健康老年营养与膳食客观题专练
- 贵州2025自考航空运动航空体育心理学客观题专练
- 包装材料生产工艺升级与创新方案
- 2025年大学英语二考试题及答案
- 园林景观视觉焦点设计
- 2025年江苏徐州地理试卷及答案
- 2023四年级数学上册 四 统计表和条形统计图(一)练习七(1)说课稿 苏教版
- 湖北2025自考电子商务与金融简答题专练
- 安全生产大学习、大培训、大考试考试试题(含答案)
- 2025年新债转股增资扩股协议书
- 四川省成都中考英语考试试题试卷解析
- NB/T 11636-2024煤矿用芳纶织物芯阻燃输送带
- 2025年广元客运从业资格证考试题库
- 新人直播流程标准化指南
- 2025至2030中国桌面云行业发展趋势预判及市场前景预测报告
- (高清版)DB50∕T 691-2016 红珊瑚鉴定技术规范
- 供应商具备履行合同所必需的设备和专业技术能力的证明材料8篇
- 职场心态调整与职业发展
- 协议离婚三大忌净身出户
评论
0/150
提交评论