什么是事件?
事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。
GUI应用程序是由事件(event)来驱动的。例如点击鼠标,按下按键。 在Qt中使用一个对象来表示一个事件,它继承自QEvent类。
常见事件:鼠标事件(例如点击一下鼠标左键)、键盘事件(例如按下键盘的某个键)、定时事件、上下文菜单事件、关闭事件、拖放事件、绘制事件。
在QT官方的文档中枚举了各种各样的事件
既然事件发生了,那么我们就需要对一个事件进行处理,就像我们点击了一下鼠标左键,程序就给了我们反馈一样,那么我们通过什么来对事件进行处理呢?
事件的处理
通过文档我们可以看到,在QWidget类中提供了很多等待我们在子类中重写的虚函数,通常,我们通过重写这些函数来处理一些特定部件的典型事件。
当然,我们也可以通过在对象上安装事件过滤器。使用事件过滤器可以在一个界面类中同时处理不同子部件的不同事件。
下面我们来尝试通过鼠标事件实时显示鼠标的坐标
在Widget.h文件中选中class Widget右键选择添加虚函数
在这里我们勾选我们想要重写的虚函数
注意此时还要在头文件中添加QMouseEvent头文件
在Ui文件中放置一个label起名为labelmove用来显示坐标的移动
void Widget::mousePressEvent(QMouseEvent *event)
{
if(event->button()!=Qt::LeftButton)
{
return;//如果按下的不是鼠标左键就直接返回
}
QPoint pt =event->pos();//pt用来获取鼠标相对Widget的位置(以widget框左上角为(0,0)点)
QString str=QString::asprintf("pos()=(%d,%d)",pt.x(),pt.y());
ui->labelmove->setText(str);
ui->labelmove->adjustSize();//调整标签的size
ui->labelmove->move(event->pos());//移动显示标签到新的坐标
QWidget::mousePressEvent(event);
}
实现虚函数的重写