簡體   English   中英

Qt mouseMoveEvent在按下鼠標時不觸發

[英]Qt mouseMoveEvent not firing when mouse pressed

我有一個自定義QGraphicsScene,其中有一個mouseMoveEvent(QGraphicsSceneMouseEvent * event);

當我將鼠標懸停在場景上時,將正確觸發mouseMoveEvent。
但是,當我將鼠標懸停並按下鼠標時,它將不再被觸發。 這是我在主窗口中設置整個場景的方式:

scene = new NodeScene(this);  -> My Custom QGraphicsScene class
scene->setSceneRect(QRectF(0, 0, 5000, 5000));

QHBoxLayout *layout = new QHBoxLayout;
view = new QGraphicsView(scene);
layout->addWidget(view);
view->setDragMode(QGraphicsView::RubberBandDrag);
view->setMouseTracking(true);

QWidget *widget = new QWidget;
widget->setLayout(layout);
setCentralWidget(widget);
scene->setCentralWidget(widget);

這是我處理鼠標事件的代碼(用於Maya執行):

void NodeScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    MGlobal::displayInfo("Move");
    QGraphicsScene::mouseMoveEvent(event);
}

void NodeScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    MGlobal::displayInfo("Press");
    QGraphicsScene::mousePressEvent(event);
}

void NodeScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
    MGlobal::displayInfo("Release");
    QGraphicsScene::mouseReleaseEvent(event);
}

知道即使按下鼠標按鈕也如何獲取mouseMoveEvents嗎?

聽起來您並沒有實現所有的鼠標事件,而只是實現了mouseMoveEvent。

覆蓋鼠標事件時,應處理所有事件(移動,按下和釋放事件)。

然后,您可以在press事件中設置一個布爾值,以知道在進入mouseMove事件時是否按住了鼠標按鈕。

通過將我的代碼與其他示例進行比較發現了問題,這是由於setDragMode(QGraphicsView::RubberBandDrag);導致的setDragMode(QGraphicsView::RubberBandDrag); 線。 默認情況下,該代碼應位於QGraphicsView :: NoDrag上,並且僅在按下時才啟用RubberBandDrag。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM