close
A good example that help you learn how to handle mouse events
After settings we got a new class named MyQLabel, which inherits from QWidget.
myqlabel.h
myqlabel.cpp
And now we replace QWidget with QLabel, as shown below
myqlabel.h
myqlabel.cpp
The label indeeds inherits from MyQLabel now.
Go back to myqlabel.h
Threre are three override events in QLabel, including mouseMoveEvent, mousePressEvent
and mouseRelaseEvent.
mainwindow.h
create four connections between sender (ui->lblMouse) and their receivers declared in the mainwindow
========================================================================
myqlabel.h
#ifndef MYQLABEL_H
#define MYQLABEL_H
#include <QLABEL>
#include <QMouseEvent>
#include <QEvent>
#include <QDebug>
class MyQLabel : public QLabel
{
Q_OBJECT
public:
explicit MyQLabel(QWidget *parent = nullptr);
void mouseMoveEvent(QMouseEvent *ev) override;
void mousePressEvent(QMouseEvent *ev) override;
void mouseReleaseEvent(QMouseEvent *ev) override;
void leaveEvent(QEvent *);
int x, y;
signals:
void Mouse_Pressed();
void Mouse_Release();
void Mouse_Move();
void Mouse_Left();
};
#endif // MYQLABEL_H
myqlabel.cpp
#include "myqlabel.h"
MyQLabel::MyQLabel(QWidget *parent) : QLabel(parent)
{
}
void MyQLabel::mouseMoveEvent(QMouseEvent *ev)
{
// get current mouse position
this->x = ev->x();
this->y = ev->y();
emit Mouse_Move();
qDebug() << "signal:: mouseMoveEvent";
}
void MyQLabel::mousePressEvent(QMouseEvent *ev)
{
emit Mouse_Pressed();
qDebug() << "signal:: mousePressEvent";
}
void MyQLabel::mouseReleaseEvent(QMouseEvent *ev)
{
emit Mouse_Release();
qDebug() << "signal:: mouseReleaseEvent";
}
void MyQLabel::leaveEvent(QEvent *)
{
emit Mouse_Left();
qDebug() << "signal::leaveEvent";
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
public slots:
// receive singals emitted by a MyQLabel instance
void Mouse_Pressed();
void Mouse_Relese();
void Mouse_Move();
void Mouse_Left();
};
#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);
connect(ui->lblMouse, SIGNAL(Mouse_Move()), this, SLOT(Mouse_Move()));
connect(ui->lblMouse, SIGNAL(Mouse_Pressed()), this, SLOT(Mouse_Pressed()));
connect(ui->lblMouse, SIGNAL(Mouse_Release()), this, SLOT(Mouse_Relese()));
connect(ui->lblMouse, SIGNAL(Mouse_Left()), this, SLOT(Mouse_Left()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::Mouse_Pressed()
{
ui->lblMouse_Current_Event->setText("Mouse Pressed!");
qDebug() << "ui slot:: Mouse Pressed!";
}
void MainWindow::Mouse_Relese()
{
ui->lblMouse_Current_Event->setText("Mouse Released!");
qDebug() << "ui slot:: Mouse Released!";
}
void MainWindow::Mouse_Move()
{
ui->lbl_Mouse_Current_Pos->setText(QString("X = %1, Y = %2").arg(ui->lblMouse->x).arg(ui->lblMouse->y));
ui->lblMouse_Current_Event->setText("Mouse Moving!");
}
void MainWindow::Mouse_Left()
{
ui->lblMouse_Current_Event->setText("Mouse Left!");
qDebug() << "ui slot:: Mouse Left!";
}
References:
全站熱搜
留言列表