写在前面
前几篇讲了Qt的一些代码操作、库函数、基本知识。这一篇讲Qt里比较重要的东西:事件
知识记录
(1)常见分类
键盘事件、鼠标事件、拖放事件、滚轮事件、绘屏事件、定时事件、焦点事件、进入和离开事件、移动事件、大小和改变事件、显示和隐藏事件、窗口事件
(2)解释
事件是继承于QEvent这个抽象类的,各种事件又叫各种Event。所有的QObject对象都可以捕获事件。对事件的捕获函数在开发者开发Qt时已经完成了,所以我们直接用就行
(3)本篇重点
本篇主要实现Ctrl+S可以实现文本编辑器的保存这一功能和监视鼠标位置并输出鼠标点击情况的功能
实现过程
(1)打开项目
打开上一篇的项目,在这个项目的基础上增加保存快捷键和监视鼠标点击的功能
(2)实现键盘事件
QEvent是一个抽象类,所以派生类想要实现某个事件,只需要重写成员函数
void keyPressEvent(QKeyEvent *k);
在主窗口类里声明这样一个函数,这个函数是QKeyEvent类的虚函数,重写虚函数即可
void MainWindow::keyPressEvent(QKeyEvent *k)
{
if(k->modifiers()==Qt::ControlModifier && k->key() == Qt::Key_S)
{
saveActionSlot();
}
}
代码解释:
这个代码调用QKeyEvent的modifiers成员和key成员,==后面的是开发者一开始就宏定义的按键,可以去搜什么键是什么然后用就行
有一个非常重要的点: 事件处理函数的大小写是敏感的,如果函数名写错,并不是调用库函数,那写这个代码也不会触发事件处理。博主在最开始就写错了,然后没有实现。
这是修改后的运行结果
(3)实现监视鼠标
void MainWindow::mousePressEvent(QMouseEvent *m)
{
QPoint pt = m->pos();
qDebug()<<pt;
if(m->button()==Qt::LeftButton)
{
qDebug()<<"左键被按下";
}
else if(m->button()==Qt::RightButton)
{
qDebug()<<"右键被按下";
}
}
也是重写虚函数,这个虚函数是来自mousePressEvent类的,参数是QMouseEvent型指针
先声明一个坐标类对象,赋值为pos()的返回值,即鼠标的位置
然后用qDebug()输出信息,这个函数的作用是在信息输出台出输出
然后就是判断,这个也是开发者事先完成的宏定义
附一下运行结果
篇末总结
这一篇篇幅较小而且内容简单。主要是为了说明Qt里有事件这个东西和怎么去用事件,具体运用还需要在后续做项目时自己摸索