Qt信号和槽、常用函数及绘图.ppt
QtQt信号和槽、常用函数及绘图信号和槽、常用函数及绘图1学习目标学习目标信号和槽信号和槽的基本实现语句(掌握、重点)信号和槽的连接规则(掌握、重点)信号和槽的参数匹配规则(掌握、重点)常用函数QWidget等类常用函数(熟悉)绘图个性化图形绘制方法(掌握、重点)常用QPainter类函数(熟悉)QPainter类实现个性化程序的方案(了解)2学习目标学习目标信号和槽信号和槽的基本实现语句(掌握、重点)信号和槽的连接规则(掌握、重点)信号和槽的参数匹配规则(掌握、重点)常用函数QWidget等类常用函数(熟悉)绘图个性化图形绘制方法(掌握、重点)常用QPainter类函数(熟悉)QPainter类实现个性化程序的方案(了解)3问题的提出 例子的窗体中,点击“hide”或“show”按钮,为何窗口能做出相应的响应?问题的分析显示功能对应对象的show()函数,隐藏功能对应对应对象的hide()函数点击按钮后执行该函数即可问题的解决使用“信号和槽”机制完成该任务的过程:按下按钮clicked()信号产生槽函数hide()被调用窗体隐藏信号和槽(简介)信号和槽(简介)4信号一个特定的标识,当内部发生某些事件或状态改变时能够被“发射”槽槽和普通的C+类的成员函数几乎是一样的唯一不同的是:槽可以和信号连接在一起,当发射这个信号的时候,就会自动调用这个槽作用 对象之间通信的高级接口事件出现时,通过发送信号将与之关联的槽函数激活,即执行槽函数代码信号和槽(简介)信号和槽(简介)5信号和槽(简介)信号和槽(简介)6程序总结:信号和槽的连接基本实现语句:QObject:connect(a,SIGNAL(a_signal(int),b,SLOT(b_slot(int)Connect是静态成员函数,需要加QObject:如果是QObject子类来调用则不用连接的两个对象需要在连接前已经存在,否则会报错a_signal和b_slot中只能有参数类型,而非具体的值 信号和槽(简介)信号和槽(简介)7一个信号可以连接多个槽Task 再创建一个label,点击hide按钮或show按钮按钮时两个label能同时显示或隐藏多个信号可以连接一个槽Task 在最初程序基础上再创建一个按钮,点两个按钮中任意一个都可以隐藏label一个信号可以与另外一个信号相连接Task 连接两个按钮的clicked信号信号和槽(连接规则)信号和槽(连接规则)8要把信号成功连接到槽或另一个信号,它们的参数必须具有相同的顺序和类型注:参数匹配的检查使用strcmp函数,所以类型必须严格一致。如string和const string就不匹配例外:信号参数比槽多,多余参数被忽略如果类型不匹配,或信号和槽不存在,编译时不会报错,运行时会有警告信号和槽(参数匹配)信号和槽(参数匹配)9练习1:使用滑块控制LCD上的数字发生变化练习2:使用按钮控制动画的暂停和播放信号和槽(练习)信号和槽(练习)10在designer中创建一个按钮,一个标签选择“编辑/信号和槽”拖动连接按钮和标签,弹出信号和槽选择对话框,观察有哪些信号和槽窗体/预览,查看效果信号和槽(信号和槽(designerdesigner体验)体验)11问题的提出 之前是使用Qt类中已定义的信号和槽,如果是自己定义实现的类,如何加入信号和槽机制,实现自己想要的功能?问题的分析声明自定义的信号,直接使用,无需实现声明自定义的槽,跟类成员函数一样实现问题的解决声明时分别加入slots和signals关键字即可使用信号时:emit my_order(angle)信号和槽(自定义)信号和槽(自定义)12类的声明开始处加入Q_OBJECT宏,标准C+不支持,Qt通过moc(Meta Object Compiler)工具自动将其转为C+代码槽函数和普通C+类成员函数一样实现,但是当做真正的槽使用的时候访问权限的定义没有任何效果信号只需声明无需实现,定义的访问权限没有意义必须把类定义从实现文件中分离出来并放到头文件中。信号和槽(自定义)信号和槽(自定义)13信号和槽(自定义)信号和槽(自定义)14信号和槽(自定义)信号和槽(自定义)15程序总结:自定义的类一般可以从QWidget类继承信号和槽都是类的成员函数自定义槽加关键字slots自定义信号加关键字signals使用自定义信号:emit my_signal(参数列表)信号和槽(自定义)信号和槽(自定义)16练习1:用两个按钮分别控制动画的暂停和继续播放练习2:创建一个按钮和LCD,每次点击按钮,LCD上的数字值加1练习3:做一个简单的猜数字游戏。内部规则等独立为一个类,该类的构造函数中随机产生目标值,有槽函数接收用户猜测的数字,发信号表明猜测的结果信号和槽(练习)信号和槽(练习)17学习目标学习目标信号和槽信号和槽的基本实现语句(掌握、重点)信号和槽的连接规则(掌握、重点)信号和槽的参数匹配规则(掌握、重点)常用函数QWidget等类常用函数(熟悉)绘图个性化图形绘制方法(掌握、重点)常用QPainter类函数(熟悉)QPainter类实现个性化程序的方案(了解)18QWidget类:setEnabled(bool)控件使能 setDisabled(bool)输入使能 width()窗口宽度 height()窗口高度 close()关闭 show()显示 hide()隐藏QFont类:QFont font(Helvetica,12,QFont:Bold)setFont(font)字体设置方式常用函数常用函数19QLCDNumber类:setNumDigits()位数设置 display()内容显示QTimer类:start()启动定时 timeout()到时信号QString类:toInt()字符串转整数 toAScii()16位字符串转8位 number()字符串转数字 fromAscii()8位字符串转16位常用函数常用函数20学习目标学习目标信号和槽信号和槽的基本实现语句(掌握、重点)信号和槽的连接规则(掌握、重点)信号和槽的参数匹配规则(掌握、重点)常用函数QWidget等类常用函数(熟悉)绘图个性化图形绘制方法(掌握、重点)常用QPainter类函数(熟悉)QPainter类实现个性化程序的方案(了解)21Qt事件处理的意义作为GUI界面,需要做很多和用户交互的事情。事件(event)很大程度上就是响应用户动作Qt的事件处理机制事件产生时,调用event()函数,由它根据事件类型调用相应的事件处理器,如mousePressEvent()、paintEvent()等所以约定的事件发生时对应的函数自动被调用。通过重写该函数对应代码实现相应功能 绘图(简介)绘图(简介)22绘图事件的意义 常用的控件外,怎样来一些个性的外观,比如最基本的矩形、圆等;重新实现paintEvent()函数可以绘制个性化控件,更能定制窗口部件,随心所欲控制外观;绘图事件程序的处理流程代码放置在paintEvent()中,即重新实现绘图事件处理器;创建QPaint类的对象,调用相关QPainter类的函数实现个性化绘制;绘图(简介)绘图(简介)23Qt的二维图形绘制基于QPainter类 可以绘制几何形状(点、线、矩形、椭圆等)可以绘制像素映射、图形和文字 高级特性:像素混合、渐变填充、平移、旋转等QPainter类的使用 画笔(setPen):画线和边缘 画刷(setBrush):填充几何形状的图案 字体(setFont):用来绘制文字,字体可选绘图(简介)绘图(简介)24绘图(程序演练)绘图(程序演练)25绘图(程序演练)绘图(程序演练)26程序总结:重新实现void paintEvent(QPaintEvent*)函数paintEvent函数中定义QPainter对象使用该对象调用相关函数,实现绘图,绘图相关的操作都需要在该函数体中执行绘图(程序总结)绘图(程序总结)27程序总结:窗口视口转换模式,相当于把一张电子图片放到大小不同的显示器上去显示QPainter:setWindow(x,y,width,height)设置窗口QPainter:setViewport(x,y,width,height)设置视口绘图(程序总结)绘图(程序总结)28QPainter类常用函数 drawEllipse()画椭圆 drawRect()画矩形 drawLine()画直线 drawPicture()画图片 drawImage()绘图片 drawPixmap()绘图片 drawText()绘文本 fillRect()填充矩形绘图绘图(常用函数常用函数)29QPainter类常用函数 rotate()角度旋转 translate()坐标变换 save()画笔保存 restore()画笔恢复 setBrush()设置画刷 setPen()设置画笔 setFont()设置字体绘图绘图(常用函数常用函数)30学习目标回顾学习目标回顾信号和槽信号和槽的基本实现语句(掌握、重点)信号和槽的连接规则(掌握、重点)信号和槽的参数匹配规则(掌握、重点)常用函数QWidget等类常用函数(熟悉)绘图个性化图形绘制方法(掌握、重点)常用QPainter类函数(熟悉)QPainter类实现个性化程序的方案(了解)31练习1:绘制一个8x8的棋盘,棋盘上方有两个按钮,一个显示“开始”,一个显示“结束”,点击“开始”按钮后该按钮变灰,点击“结束”按钮退出程序。要求棋盘在窗口拉伸时仍能保持居中的正方形。总结练习总结练习32