Event重载事件
前言:
事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。
键盘事件参考文章: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