QMouseEvent类用来表示一个鼠标事件,当在窗口部件中按下鼠标或者移动鼠标指针时,都会产生鼠标事件。利用QMouseEvent类可以获知鼠标是哪个键按下了,还有鼠标指针的当前位置等信息。通常是重定义部件的鼠标事件处理函数来进行一些自定义的操作。
QWheelEvent类用来表示鼠标滚轮事件,在这个类中主要是获取滚轮移动的方向和距离。
下面来看一个实际的例子,这个例子要实现的效果是:可以在界面上按着鼠标左键来拖动窗口,双击鼠标左键来使其全屏,按着鼠标右键则使指针变为一个自定义的图片,而使用滚轮则可以放大或者缩小编辑器中的内容。
实例代码:
void Widget::mouseDoubleClickEvent(QMouseEvent *event) //鼠标双击
{
qDebug()<<"mouse DoubleClick";
}
void Widget::mouseMoveEvent(QMouseEvent *event) //鼠标移动
{
qDebug()<<"mouse pos"<<event->pos();
}
void Widget::mousePressEvent(QMouseEvent *event) //鼠标按键按下
{
if (event->button() == Qt::LeftButton) {
qDebug()<<"left button press";
}else if(event->button() == Qt::RightButton) {
qDebug()<<"right button press";
}else if(event->button() == Qt::MidButton) {
qDebug()<<"mid button press";
}
}
void Widget::mouseReleaseEvent(QMouseEvent *event) //鼠标按键释放
{
if (event->button() == Qt::LeftButton) {
qDebug()<<"left button release";
}else if(event->button() == Qt::RightButton) {
qDebug()<<"right button release";
}else if(event->button() == Qt::MidButton) {
qDebug()<<"mid button release";
}
}
对于鼠标的移动事件,默认是不会实时触发事件(就是只有当左键一直按住,然后滑动鼠标才会触发事件),如果要开启实时触发事件。
就要在构造函数中添加下面的代码。
setMouseTracking(false);//设置鼠标实时追踪模式 true表示开启 false表示关闭
Mouse的button
Constant | Value | Description |
| | The button state does not refer to any button (see QMouseEvent::button()). |
| | This value corresponds to a mask of all possible mouse buttons. Use to set the 'acceptedButtons' property of a MouseArea to accept ALL mouse buttons. |
| | The left button is pressed, or an event refers to the left button. (The left button may be the right button on left-handed mice.) |
| | The right button. |
| | The middle button. |
| | The middle button. |
滚轮事件
void Widget::wheelEvent(QWheelEvent * event)
{
if (event->delta() > 0) {
qDebug()<<"front"<<event->delta()/8; //向前滚动多少度
}else{
qDebug()<<"back"<<event->delta()/8; //向后滚动多少度
}
}