自学QT之鼠标事件

QT是事件驱动的,监听事件自然也是一个重点啦。首先是监听鼠标事件。

新建项目,基于mainwindow头文件:

#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

主要代码:

#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。

运行效果:



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值