QT是事件驱动的,监听事件天然也是一个重点啦。首先是监听鼠标事件。函数
新建项目,基于mainwindow头文件:this
#ifndef MOUSEEVENT_H #define MOUSEEVENT_H #include <QMainWindow> #include <QLabel> #include <QStatusBar> #include <QMouseEvent> class MouseEvent : public QMainWindow { Q_OBJECT public: MouseEvent(QWidget *parent = 0); ~MouseEvent(); protected: void mousePressEvent(QMouseEvent *e); void mouseMoveEvent(QMouseEvent *e); void mouseReleaseEvent(QMouseEvent *e); void mouseDoubleClickEvent(QMouseEvent *); private: QLabel *statusLabel; QLabel *mousePosLabel; }; #endif // MOUSEEVENT_H
主要代码:spa
#include "mouseevent.h" MouseEvent::MouseEvent(QWidget *parent) : QMainWindow(parent) { setWindowTitle(tr("鼠标事件")); statusLabel=new QLabel; statusLabel->setText(tr("当前位置:")); statusLabel->setFixedWidth(100); mousePosLabel=new QLabel; mousePosLabel->setText(tr("")); mousePosLabel->setFixedWidth(100); statusBar()->addPermanentWidget(statusLabel); statusBar()->addPermanentWidget(mousePosLabel); this->setMouseTracking(true); resize(400,200); } MouseEvent::~MouseEvent() { } void MouseEvent::mousePressEvent(QMouseEvent *e) { QString str="("+QString::number(e->x())+","+QString::number (e->y())+")"; if(e->button()==Qt::LeftButton) { statusBar()->showMessage(tr("左键")+str); } if(e->button()==Qt::RightButton) { statusBar()->showMessage(tr("右键")+str); } 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("释放位置:")+str,3000); } void MouseEvent::mouseDoubleClickEvent(QMouseEvent *) { }
这里的 setMouseTracking()函数,是用来决定是否 实时追踪鼠标,默认的是false。但是咱们须要实时得到鼠标的位置,所以须要设置诶true。 code
运行效果:事件