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