鼠标事件包括鼠标的移动,鼠标键按下,松开,单击,双击等
使用鼠标事件时,加入对应头文件
#include
常见的鼠标事件如下:
void mousePressEvent(QMouseEvent *e); //单击
void mouseMoveEvent(QMouseEvent *e); //移动
void mouseReleaseEvent(QMouseEvent *e); //释放
void mouseDoubleClickEvent(QMouseEvent *e); //双击
void wheelEvent(QWheelEvent *e); //滑轮滚动
QMouseEvent类包含了用于描述鼠标事件的参数。
当在一个窗口里按住鼠标按键、或移动、或释放就会产生鼠标事件QMouseEvent。
鼠标移动事件只会在按下鼠标按键的情况下才会发生,除非通过显式调用QWidget::setMouseTracking()函数来开启鼠标轨迹,这种情况下只要鼠标指针在移动,就会产生一系列的QT鼠标事件;
在一个窗口中,当鼠标按键被按下时,QT会自动捕捉鼠标轨迹,鼠标指针所在的父窗口会继续接受鼠标事件,直到最后一个鼠标按键被释放。
设置一个特定窗口,状态栏右侧会实时显示当前鼠标所在的位置信息

mainwindow.h头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
void mousePressEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
void mouseDoubleClickEvent(QMouseEvent *e);
void wheelEvent(QWheelEvent *e);
private:
Ui::MainWindow *ui;
QLabel *statusLabel;
QLabel *MousePosLabel;
};
#endif // MAINWINDOW_H
mainwindow.cpp文件
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle(tr("鼠标事件"));
statusLabel = new QLabel;
statusLabel->setText(tr("当前位置:"));
statusLabel->setFixedWidth(100);
MousePosLabel = new QLabel;
MousePosLabel->setText(tr(""));
MousePosLabel->setFixedWidth(100);
statusBar()->addPermanentWidget(statusLabel);
statusBar()->addPermanentWidget(MousePosLabel);
this->setMouseTracking(true);
resize(400,400);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::mousePressEvent(QMouseEvent *e)
{
QString str="("+QString::number(e->x())+","+QString::number(e->y())+")";
if(e->button()==Qt::LeftButton)
statusBar()->showMessage(tr("左键:")+str);
else if(e->button()==Qt::RightButton)
statusBar()->showMessage(tr("右键:")+str);
else if(e->button()==Qt::MidButton)
statusBar()->showMessage(tr("中键:")+str);
}
void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
MousePosLabel->setText("("+QString::number(e->x())+","+QString::number(e->y())+")");
}
void MainWindow::mouseReleaseEvent(QMouseEvent *e)
{
QString str="("+QString::number(e->x())+","+QString::number(e->y())+")";
statusBar()->showMessage(tr("释放在:")+str,3000);
}
void MainWindow::mouseDoubleClickEvent(QMouseEvent *e)
{
QString str="("+QString::number(e->x())+","+QString::number(e->y())+")";
statusBar()->showMessage(tr("双击在:")+str,3000);
}
void MainWindow::wheelEvent(QWheelEvent *e)
{
if(e->delta()>0) {
statusBar()->showMessage(tr("鼠标滑轮向外滚动"),5000);
}
else {
statusBar()->showMessage(tr("鼠标滑轮向内滚动"),5000);
}
}
注: