2020.8.3黑马QT学习笔记

一。事件
1.注意:
(1)在事件名称上用F1没有效果,需要在QWidget上用
(2)
2.新建事件:
(1)新建一个QWidget文件,命名为mylabel
(2)将头文件的class mylabel :publi QWidget改为class mylabel :publi QLabel(因为所用到的控件label是继承于QLabel的)
(3)将cpp文件中的QWidget(parent)改为QLabel(parent)
(4)在头文件中新建protected声明,并在protected下声明事件。
在这里插入图片描述

(5)在cpp文件中编写事件函数
2020.8.3黑马QT学习笔记_第1张图片

3.鼠标移动事件(mouseMoveEvent)
(1)默认情况需要先按一下才开始触发移动事件
(2)若要一进入程序就触发事件,要在cpp文件的主函数下添加:
this->setMouseTracking(true);

static int x = 0; // 声明并初始化(此时为初始化赋值,如果这条语句出现在函数中,即便被多次调用,也只会执行一次。)

4.定时器事件(timerEvent)
(1)在头文件中声明定时器事件,声明一个定时器IDtimeID
(2)在cpp文件主函数启动(每秒):timeID=this->startTimer(1000);
(3)编写定时器函数
(4)停止定时器:this->killTimer(this->timeID);
5.键盘按下事件(KeyPressEvent):
(1)event->key() == Qt::Key_A表示键盘“A”键被按下。(event是函数所用的指针参数)
(2)键盘每个键名字可用F1查看
6.其他事件:
(1)鼠标点击事件:mousePressEvent
(2)鼠标释放事件:mouseReleaseEvent
(3)进入窗口事件:enterEvent
(4)离开窗口事件:leaveEvent

二。事件的接收和忽略

  1. 事件的接收:子类接收完事件后,事件就不会被父类接收:(如下,程序只会打印出“leftbutton was clicked”,而没有“was clicked”)
    (注意:因为信号和槽只处理左键点击按钮,不处理右键点击信息,所以此程序右键点击按钮也不会出现“was clicked”,而不是说明事件没有传递到父类。)
    (选中部分语句作用是使事件传到父类)
    2020.8.3黑马QT学习笔记_第2张图片2020.8.3黑马QT学习笔记_第3张图片
  2. 事件的忽略:(如上,将选中部分语句注释取消发挥作用之后,程序能够打印“leftbutton was clicked”和“was clicked”)
  3. e->ignore()命令:可以使得事件被忽略,但事件不是传递给父类,而是传递给了父组件。
  4. e->accept()命令:(Qt5默认)接收事件,事件不会传递下去。

三。event()函数的改写

  1. 事件对象创建完毕后,Qt 将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件,而是将这些事件对象按照它们不同的类型,分发给不同的事件处理器(event handler)。
    如上所述,event()函数主要用于事件的分发。所以,如果你希望在事件分发之前做一些操作,就可以重写这个event()函数了。例如,我们希望在一个QWidget组件中监听 tab 键的按下,那么就可以继承QWidget,并重写它的event()函数,来达到这个目的。
  2. 例如让定时器关闭:
    (1)在头文件中声明事件函数:(仅选中部分)
    在这里插入图片描述
    (2)在cpp文件中重写event函数
    (其中如果传入的事件已被识别并且处理,则需要返回 true,否则返回 false。如果返回值是 true,那么 Qt 会认为这个事件已经处理完毕,不会再将这个事件发送给其它对象,而是会继续处理事件队列中的下一事件。)
    (return QWideget::event(event)命令可以使得除了定时器的其他事件可以正常运作)

    2020.8.3黑马QT学习笔记_第4张图片

四。事件过滤器(this的作用是?
事件过滤器作用和位置:
2020.8.3黑马QT学习笔记_第5张图片

1.在头文件中声明事件过滤器:
2020.8.3黑马QT学习笔记_第6张图片
2.在cpp文件中安装事件过滤器(过滤哪个控件)
2020.8.3黑马QT学习笔记_第7张图片
3.编写事件过滤器函数:
(由于QString命令中的需要获得鼠标的x,y坐标,但是鼠标的x,y坐标需要在QMouseEvent的类下才能获得,而这与参数event的类QEvent不一样,所以需要选中部分的命令来转换类型。)
(第一个if语句判断是哪个控件,第二个if语句判断的是哪个事件)
(然后else里的命令同“event函数改写”中的作用相同,都是为了不影响其他事件和控件)

2020.8.3黑马QT学习笔记_第8张图片
五。猜数字游戏(此视频跳过)
1.进度条倒计时:
(1)设置一个参数time
(2)每次定时器中断,使time–,并把time值赋给进度条的参数。
六。画背景图:

  1. 步骤:
    (1)创建QWidget类项目
    (2)在头文件中声明paintEvent函数:
    在这里插入图片描述
    (3)编写paintEvent函数:(1.创建画家对象。2.指定当前窗口为绘图设备。3.绘图操作,此处为用p.drawPixmap来画背景图,并设置为背景图大小随窗口改变而改变)
    2020.8.3黑马QT学习笔记_第9张图片(4)结果:
    2020.8.3黑马QT学习笔记_第10张图片
    六。简单绘图(在五。的基础上编写编程)(比较简单可以百度搜,不详细介绍)
    1.定义画笔(画刷):
    2.将画笔(画刷)给画家:
    3.画线/画矩形/画圆/填充:

2020.8.3黑马QT学习笔记_第11张图片
2020.8.3黑马QT学习笔记_第12张图片

你可能感兴趣的:(新手入门,qt,c++)