Qt 5.9.5 Event重载事件

本文介绍了Qt 5.9.5中的键盘和鼠标事件处理,包括QKeyEvent和QMouseEvent类的使用。详细讨论了键盘的按下和释放事件,鼠标的各种点击和移动事件,以及如何利用事件过滤器(eventFilter)处理控件事件。提供了事件处理函数的重载示例及完整源码。
摘要由CSDN通过智能技术生成

前言:

事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。

键盘事件参考文章:12.1、QT::QEventTest操作

鼠标事件参考文章:12.2、QT::TestMouseEvent操作

窗口大小事件参考文章:12.3、QT::TestQResizeEvent操作

继承关系图:

在这里插入图片描述

键盘事件(QKeyEvent)

QKeyEvent类用来描述一个键盘事件。 当键盘按键被按下或者被释放时 ,键盘事 件便会被发送给拥有键盘输入焦点的部件。

键盘按下事件:

重载函数为:virtual void keyPressEvent(QKeyEvent *ev);
获取按键十进制数字:ev->key();
获取按键按下后名称:(QString)ev->key();(PS:部分按键不能转换成字符串)
”Ctrl“快捷键:Qt::ControlModifier
检测是否重复按下:ev->isAutoRepeat()

//键盘按下事件
void QKeyPressEventDemo::keyPressEvent(QKeyEvent *ev)
{
   
	if (ev->isAutoRepeat()) return;//检查是否重复按下
	if (ev -> modifiers() == Qt::ControlModifier)
	{
   
		if (ev->key() == Qt::Key_T)
		{
   
			qDebug() << QString::fromLocal8Bit("CTRL+T键按下");
		}
	}
	else if (ev->key() == Qt::Key_Z)
	{
   
		qDebug() << QString::fromLocal8Bit("Z键按下");
	}
	if (ev->key() == Qt::Key_Enter)//判断是否按下回车键
	{
   
		qDebug() << ev->key();//打印出来为十进制
	}
	qDebug() << (QString)ev->key();//强转成QString后打印出来
}

键盘松开事件:

重载函数为:virtual void keyReleaseEvent(QKeyEvent *ev);
ev>modifiers():组合按键需要借助Ctrl和Shift等按键 ,在Qt中又叫修饰按键(直译过来) ,这里需要使用 QKeyEvent的modifiers()函数来获取它们 ;
Qt::ControlModifier是指“Ctrl快捷键”

Qt::Qt::KeyboardModifier参考信息:

在这里插入图片描述

//键盘松开事件
void QKeyPressEventDemo::keyReleaseEvent(QKeyEvent *ev)
{
   
	if (ev->isAutoRepeat()) return;//检查是否重复按下
	if (ev -> modifiers() == Qt::ControlModifier)//判断是否按下Ctrl快捷键
	{
   
		if (ev->key() == Qt::Key_T)//判断是否按下T(PS:再此处需要Ctrl+T才能判断通过)
		{
   
			qDebug() << "Key_T is Released";
		}
		else if (ev->key() == Qt::Key_Z)
		{
   
			qDebug() << "Key_Z is Released";
		}
	}
}

鼠标事件(QMouseEvent)

(1)QMouseEvent类用来表示一个鼠标事件 ,当在窗口部件中按下鼠标或者移动鼠标 指针时 ,都会产生鼠标事件。 利用QMouseEvent类可以获知鼠标是哪个键按下 了 ,还有鼠标指针的当前位置等信息。 通常是重定义部件的鼠标事件处理函数来 进行一些自定义的操作。
(2)QWheelEvent类用来表示鼠标滚轮事件 ,在这个类中主要是获取滚轮移动的方向 和距离。 在滚轮事件处理函数中 ,使用QWheelEvent类的delta()函数获取了滚轮 移动的距离 ,每当滚轮旋转一下 ,默认的是15度 ,当滚轮向远离使用者的方向旋 转时 ,返回正值 ;当向着靠近使用者的方向旋转时 ,返回负值。 这样便可以利用 这个函数的返回值来判断滚轮的移动方向。

鼠标单击事件

重载函数为:virtual void mousePressEvent(QKeyEvent *ev);
获取鼠标按钮:event­>button()

//鼠标按下事件重载
void QKeyPressEventDemo::mousePressEvent(QMouseEvent *ev)
{
   
	if (ev ->button() == Qt::LeftButton)//LeftButton(鼠标左键)
	{
   
		qDebug() << QStringLiteral("鼠标左键按下");
	}
	else if (ev ->button() == Qt::RightButton)//RightButton(鼠标右键)
	{
   
		qDebug() << QStringLiteral("鼠标右键按下");
	}
	else if (ev ->button() == Qt::MiddleButton) //MiddleButton(鼠标中键)
	{
   
		qDebug() << QStringLiteral("鼠标中键按下");
	}
}

鼠标松开事件

重载函数为:virtual void mouseReleaseEvent(QKeyEvent *ev);

//鼠标松开事件重载
void QKeyPressEventDemo::mouseReleaseEvent(QMouseEvent *ev)
{
   
	if (ev->button() == Qt::LeftButton)//LeftButton(鼠标左键)
	{
   
		qDebug() << QStringLiteral("鼠标左键松开");
	}
	else if (ev->button() == Qt::Rig
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳一航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值