头文件
#pragma once
#include <QWidget>
#include "ui_QtWidgetsClass.h"
class QtWidgetsClass : public QWidget
{
Q_OBJECT
public:
QtWidgetsClass(QWidget* parent = Q_NULLPTR);
~QtWidgetsClass();
//重写五个 virtual protect 函数 使用鼠标事件
virtual void mousePressEvent(QMouseEvent *event) override;
virtual void mouseReleaseEvent(QMouseEvent *event) override;
virtual void mouseDoubleClickEvent(QMouseEvent *event) override;
virtual void mouseMoveEvent(QMouseEvent *event) override;
virtual void leaveEvent(QEvent *event) override;
virtual void enterEvent(QEvent *event) override;
private:
Ui::QtWidgetsClass ui;
};
源文件
#include "QtWidgetsClass.h"
#include <QDebug>
#include <QMouseEvent>
QtWidgetsClass::QtWidgetsClass(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
connect(ui.spinBox, static_cast<void (QSpinBox:: *)(int)>(&QSpinBox::valueChanged), ui.verticalSlider, &QSlider::setValue);
connect(ui.verticalSlider, &QSlider::valueChanged, ui.spinBox, &QSpinBox::setValue);
//设置鼠标追踪,当鼠标进入控件,不需按压左右键,将执行该部件重写的void mouseMoveEvent(QMouseEvent * event)函数
setMouseTracking(true);
}
QtWidgetsClass::~QtWidgetsClass()
{
}
//鼠标按压事件
void QtWidgetsClass::mousePressEvent(QMouseEvent * event)
{
if (event->button() == Qt::LeftButton)
{
QString str = QString("x:%1 y:%2 gx:%3 gy:%4").arg(event->x()).arg(event->y()).arg(event->globalX()).arg(event->globalY());
qDebug() << "mouse press " << str<<" \n" ;
}
}
//鼠标释放事件
void QtWidgetsClass::mouseReleaseEvent(QMouseEvent * event)
{
if (event->button() == Qt::LeftButton)
{
QString str = QString("x:%1 y:%2 gx:%3 gy:%4").arg(event->x()).arg(event->y()).arg(event->globalX()).arg(event->globalY());
qDebug() << "mouse release " << str << " \n";
}
}
//双击事件
void QtWidgetsClass::mouseDoubleClickEvent(QMouseEvent * event)
{
if (event->button() == Qt::LeftButton)
{
QString str = QString("x:%1 y:%2 gx:%3 gy:%4").arg(event->x()).arg(event->y()).arg(event->globalX()).arg(event->globalY());
qDebug() << "mouse double clicked " << str << " \n";
}
}
//移动事件
void QtWidgetsClass::mouseMoveEvent(QMouseEvent * event)
{
QString str = QString("x:%1 y:%2 gx:%3 gy:%4").arg(event->x()).arg(event->y()).arg(event->globalX()).arg(event->globalY());
if (event->buttons() & Qt::LeftButton || event->buttons() & Qt::RightButton)
{
qDebug() << "mouse is moving " << str << " \n";
}
qDebug() << "mouse is moving " << str << " \n";
}
//鼠标离开事件
void QtWidgetsClass::leaveEvent(QEvent * event)
{
qDebug() << "mouse is leaved" << " \n";
}
//鼠标进入事件
void QtWidgetsClass::enterEvent(QEvent * event)
{
qDebug() << "mouse is entering" << " \n";
}