QGraphicsScene中捕捉滑鼠事件

qianqiaoqianqi發表於2020-12-08

QGraphicsScene和QGraphicsView一般搭配用來製作動畫效果。
而QGraphicsScene和QWidget中的滑鼠事件又不一樣,在QGraphicsView中,據查一般不好處理滑鼠事件,所以用QGraphicsScene來檢測滑鼠的訊號;經過一番查詢資料,終於搞定了。

1,標頭檔案

//QGraphicsScene中使用滑鼠事件
#include <QMouseEvent>
#include <QGraphicsSceneMouseEvent>
#include <QPaintEvent>
#include <QKeyEvent>
class DrivingPage : public QGraphicsScene
{
    Q_OBJECT
public:
    DrivingPage(const QRectF & sceneRect,QObject *parent = 0);
    ~DrivingPage();
    //需要重寫 宣告滑鼠事件觸發函式
    void mousePressEvent(QGraphicsSceneMouseEvent  *event);
    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
}

2,原始檔

void DrivingPage::mousePressEvent(QGraphicsSceneMouseEvent  *event)
{
    // 如果是滑鼠左鍵按下
    if(event->button() == Qt::LeftButton)
    {
        QGraphicsScene::mousePressEvent(event);//這個函式沒多大用,因為已經檢測到滑鼠左鍵按下事件了
        qDebug()<<"mousePressEvent LeftButton" << event->scenePos().x() << event->scenePos().y();//滑鼠的座標點。注意用scenePos()
    }
    // 如果是滑鼠右鍵按下
    else if(event->button() == Qt::RightButton)
    {
        qDebug()<<"mousePressEvent RightButton" << event->scenePos().x() << event->scenePos().y();
        QGraphicsScene::mousePressEvent(event);//
    }
}
void DrivingPage::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    qDebug("************mouseMoveEvent*****************");
    QGraphicsScene::mouseMoveEvent(event);//感覺和滑鼠按鍵一樣,沒特別大作用,已經檢測到滑鼠座標了scenePos()
}

主要是檢測滑鼠事件,檢測到後根據滑鼠的按鍵和移動、座標等資訊,然後再寫詳細的處理函式。

注:轉載請註明出處。QQQQ

相關文章