Qt 应用程序的事件循环始于main函数中的exec()函数 如:QApplication::exec()、QDialog::exec()、QMenu::exec()
在执行exec()函数之后,程序将进入事件循环来监听应用程序的事件。当事件发生时,Qt 将创建一个事件对象。Qt 中所有事件类都继承于QEvent。在事件对象创建完毕后,Qt 将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件,而是将这些事件对象按照它们不同的类型,分发给不同的事件处理器(event handler)。所以,如果你希望在事件分发之前做一些操作,就可以重写这个event()函数了。
鼠标事件
void mousePressEvent(QMouseEvent *event); //单击
void mouseReleaseEvent(QMouseEvent *event); //释放
void mouseDoubleClickEvent(QMouseEvent *event); //双击
void mouseMoveEvent(QMouseEvent *event); //移动
void wheelEvent(QWheelEvent *event); //滑轮
用法1:
以下函数须在头文件中声明
void Widget::mousePressEvent(QMouseEvent *e)
{
if(e->button()==Qt::LeftButton){ //左键按下
label->setText("left mousePressed!");
}else if(e->button() == Qt::RightButton){ //右键按下
label->setText("right mousePressed!");
}
}
void Widget::mouseMoveEvent(QMouseEvent *e) //鼠标左键或者右键按下并且移动
{
label->setText("mouseMoving!");
}
void Widget::mouseReleaseEvent(QMouseEvent *e)
{
if(e->button()==Qt::LeftButton){
label->setText("left mouseReleased!"); //左键抬起
}else if(e->button() == Qt::RightButton){
label->setText("right mouseReleased!"); //右键抬起
}
}
void Widget::mouseDoubleClickEvent(QMouseEvent *e)
{
// label->setText("mouseDoubleClickEvent!");
}