根据B站《最新QT从入门到实战完整版|传智教育》学习的,BV号:BV1g4411H78N
鼠标事件 QEvent
鼠标进入事件 enterEvent
鼠标离开事件 leaveEvent
鼠标按下事件 mousePressEvent(QMouseEvent * ev)
鼠标释放事件 mouseReleaseEvent
鼠标移动事件 mouseMoveEvent
代码中所用到的一些东西
setMouseRracking(true); 用来设置鼠标追踪,默认是false的
ev -> x() x坐标 ev -> y() y坐标
ev->button() 判断所有按键 Qt::LeftButton Qt::RightButton
ev -> buttons() 判断组合按键,可以判断move时的左右键,配合&一起使用
格式化字符串 QString("%1 %2").arg(111).arg(222);
mylabel.h
#ifndef MYLABEL_H
#define MYLABEL_H
#include <QLabel>
class myLabel : public QLabel
{
Q_OBJECT
public:
explicit myLabel(QWidget *parent = nullptr);
//鼠标进入事件
void enterEvent(QEvent * event);
//鼠标离开事件
void leaveEvent(QEvent* event);
//鼠标按下事件
virtual void mousePressEvent(QMouseEvent * ev);
//鼠标释放事件
virtual void mouseReleaseEvent(QMouseEvent * ev);
//鼠标移动事件
virtual void mouseMoveEvent(QMouseEvent * ev);
signals:
};
#endif // MYLABEL_H
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
mylabel.cpp
#include "mylabel.h"
#include <QDebug>
#include <QMouseEvent>
myLabel::myLabel(QWidget *parent) : QLabel(parent)
{
//设置鼠标追踪
setMouseTracking(true);
}
//鼠标进入事件
void myLabel::enterEvent(QEvent * event)
{
//qDebug() << "mouse enter";
}
//鼠标离开事件
void myLabel::leaveEvent(QEvent* event)
{
//qDebug() << "mouse leave";
}
//鼠标按下事件
void myLabel::mousePressEvent(QMouseEvent * ev)
{
//鼠标左键按下打印信息
// if(ev->button() == Qt::LeftButton)
// {
//坐标一个是基于控件,一个是基于屏幕
QString str = QString("mouse press x=%1 y=%2 global: x=%3 y=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug() << str;
// }
}
//鼠标释放事件
void myLabel::mouseReleaseEvent(QMouseEvent * ev)
{
// if(ev->button() == Qt::LeftButton)
// {
QString str = QString("mouse release x=%1 y=%2 global: x=%3 y=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug() << str;
// }
}
//鼠标移动事件
void myLabel::mouseMoveEvent(QMouseEvent * ev)
{
//鼠标移动事件是一个持续事件,不能用常规的方法判断左右键
//if(ev->button() == Qt::LeftButton)
// if(ev->buttons() & Qt::LeftButton)
// {
QString str = QString("mouse move x=%1 y=%2 global: x=%3 y=%4").arg(ev->x()).arg(ev->y()).arg(ev->globalX()).arg(ev->globalY());
qDebug() << str;
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}