您现在的位置是:首页 >其他 >6.事件系统网站首页其他

6.事件系统

B.D.S. 2024-06-17 10:19:56
简介6.事件系统

事件

事件的传递

新建Widget项目myevent,类名WIdget不变
新建C++类如下:
在这里插入图片描述
粘贴代码
1myevent运行结果:
在这里插入图片描述
输入任意字符时,qDebug显示如下,但框内无法显示输入的字符
在这里插入图片描述

//mylineedit.cpp中

void MyLineEdit::keyPressEvent(QKeyEvent *event) // 键盘按下事件
{
    qDebug() << tr("MyLineEdit键盘按下事件");
    QLineEdit::keyPressEvent(event);          // 执行QLineEdit类的默认事件处理,在框内可显示字符
    event->ignore();                          // qDebug多一行提示:"Widget键盘按下事件"
}

解除如上部分代码的注释后
运行结果:框内可显示输入的字符,qDebug有两行输出
在这里插入图片描述
事件先传递给获得焦点的窗口(Line Edit),若该部件忽略该事件,则传递给部件的父窗口(Widget)

添加事件过滤器eventFilter后(直接运行2myevent)
2myevent运行结果:
在这里插入图片描述
可见,事件的传递顺序如下:
在这里插入图片描述

鼠标和滚轮事件

新建Widget项目mymouseevent,类名WIdget不变
ui界面拖用一个Text Edit
粘贴代码

运行结果:
(鼠标的变化,一般的截屏很难展示T_T)
主窗口界面的鼠标为小手掌,按下左键变为握紧的手掌,按下右键变为图片
双击进入全屏,双击再双击退出全屏
点击Text Edit内部,滚轮影响光标的长度

键盘事件

新建Widget项目mykeyevent,类名WIdget不变
粘贴代码
4mykeyevent运行结果:
按下ctrl+M,窗口最大化,相当于大多页面右上角这个方框的作用
在这里插入图片描述
一直按则自动重复
5mykeyevent运行结果:
按上时qDebug显示如下,一直按则一直增加如下显示
在这里插入图片描述
避免自动重复,实现两个键同时按下
6mykeyevent运行结果:
按左不放手,再按上,松开上时,按键斜移
在这里插入图片描述

定时器事件与随机数

新建Widget项目mytimeevent,类名WIdget不变
粘贴代码
7mytimeevent运行结果:
读取当前时间,每1秒随机移动,10秒后溢出自动关闭窗口
在这里插入图片描述
在这里插入图片描述

事件过滤器与事件的发送

8myeventfilter运行结果:
Text Edit中滚轮影响光标长度,Spin Box中按下空格归0
构造函数中,解除这两行代码的注释,Spin Box初始为1

//    QKeyEvent myEvent(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier);
//初始化键盘按下一次向上键,初始值变为1
//    qApp->sendEvent(ui->spinBox, &myEvent);           
// 发送键盘事件到spinBox部件

在这里插入图片描述

参考书目

Qt Creator快速入门第三版

本章代码及使用方法

本章代码

遇到各种提示都点“OK”或者“Yes”(主要是关于版本的兼容性提示)

遇到如下问题的解决方法:
在这里插入图片描述
在“项目”模式的“Build & Run”点击“绿色加号”(任选一个),再回到“编辑”模式
在这里插入图片描述
直接点击“绿色箭头”即可运行
在这里插入图片描述
该方法同样适用于打开Qt Creator自带的“欢迎”界面的案例项目

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。