Qt5事件处理及实例

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("释放在:") 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值