11.1 鼠标事件及实例
鼠标事件包括鼠标的移动,鼠标键按下、松开、单击、双击等。
运行效果如下:
mouseevent.h
#ifndef MOUSEEVENT_H
#define MOUSEEVENT_H
#include <QMainWindow>
#include <QLabel>
#include <QMouseEvent>
#include <QStatusBar>
class MouseEvent : public QMainWindow
{
Q_OBJECT
public:
MouseEvent(QWidget *parent = 0);
~MouseEvent();
protected:
void mouseMoveEvent (QMouseEvent *);
void mousePressEvent (QMouseEvent *);
void mouseReleaseEvent (QMouseEvent *);
void mouseDoubleClickEvent (QMouseEvent *);
private:
QLabel *statusLabel;
QLabel *MousePosLabel;
};
#endif // MOUSEEVENT_H
mouseevent.cpp
#include "mouseevent.h"
/*
* statusBar()->addPermanentWidget(statusLabel): 在QMainWindow的状态栏中增加控件
* this->setMouseTracking (true):设置窗体追踪鼠标。函数setMouseTracking()设置窗体是否追踪鼠标,默认为false,不追踪
* 在此情况下应该至少有一个鼠标按键按下时响应鼠标移动的事件,
*/
MouseEvent::MouseEvent(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle (tr("鼠标事件"));
statusLabel = new QLabel(tr("当前位置"));
statusLabel->setFixedWidth (100);
MousePosLabel = new QLabel(tr(""));
MousePosLabel->setFixedWidth (100);
statusBar()->addPermanentWidget(statusLabel);
statusBar()->addPermanentWidget(MousePosLabel);
this->setMouseTracking (true);
resize(400, 200);
}
MouseEvent::~MouseEvent()
{
}
/*
* 鼠标按下响应函数
* QMouseEvent类的x()和y()方法可以获得鼠标相对于接收事件的窗体位置,
* globalX()和globalY()方法可以获得鼠标相对于窗口系统的位置
*/
void MouseEvent::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 MouseEvent::mouseMoveEvent(QMouseEvent *e)
{
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("释放在:")