1.mouseevent.h
#ifndef MOUSEEVENT_H
#define MOUSEEVENT_H
#include <QMainWindow>
#include <QLabel>
#include <QStatusBar>
#include <QMouseEvent>
namespace Ui {
class MouseEvent;
}
class MouseEvent : public QMainWindow
{
Q_OBJECT
public:
explicit MouseEvent(QWidget *parent = 0);
~MouseEvent();
protected:
void mousePressEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
void mouseDoubleClickEvent(QMouseEvent *e);
private:
QLabel *statusLabel;
QLabel *MousePosLabel;
Ui::MouseEvent *ui;
};
#endif // MOUSEEVENT_H
2.mouseevent.cpp
#include "mouseevent.h"
#include "ui_mouseevent.h"
#pragma execution_character_set("utf-8")
MouseEvent::MouseEvent(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MouseEvent)
{
setWindowTitle(tr("鼠标事件")); //设置窗体的标题
statusLabel=new QLabel; //创建QLabel控件statusLabel,用于显示鼠标移动时的实时位置
statusLabel->setText(tr("当前位置"));
statusLabel->setFixedWidth(100);
MousePosLabel=new QLabel; //创建QLabel控件MousePosLabel,用于显示鼠标按下或释放时的位置
MousePosLabel->setText(tr(""));
MousePosLabel->setFixedWidth(100);
statusBar()->addPermanentWidget(statusLabel); //在QMain Window的状态栏中增加控件
statusBar()->addPermanentWidget(MousePosLabel);
this->setMouseTracking(true); //设置窗体追踪鼠标。设置窗体是否追踪鼠标。
resize(400,200);
}
MouseEvent::~MouseEvent()
{
delete ui;
}
//mousePressEvent()函数为鼠标按下事件响应函数,QMouseEvent类的button()
//方法可以获得发生鼠标事件的按键属性(左键,右键,中键)。
void MouseEvent::mousePressEvent(QMouseEvent *e)
{
//QMouseEvent类的x()和y()方法可以获得鼠标相对于接收事件的窗体位置
//globalX()he
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 MouseEvent::mouseMoveEvent(QMouseEvent *e)
{
//鼠标移动事件的响应函数,QMouseEvent类的x()和y()方法可以获得鼠标的相对位置,即相对于应用程序的位置。
MousePosLabel->setText("("+QString::number(e->x())+", "+QString::number(e->y())+")");
}
//鼠标松开事件的响应函数
void MouseEvent::mouseReleaseEvent(QMouseEvent *e)
{
QString str="("+QString::number(e->x())+","+QString::number(e->y())+")";
statusBar()->showMessage(tr("释放在:")+str,3000);
}
void MouseEvent::mouseDoubleClickEvent(QMouseEvent *e)
{
}
3.main.cpp
#include "mouseevent.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MouseEvent w;
w.show();
return a.exec();
}