2015-04-02 70 views
1

我已經基於QGraphicsView創建了我自己的小部件。我這樣做是爲了重新實現一些鼠標事件這樣:光標不會改變我的QGraphicsView

void Workspace::mouseMoveEvent(QMouseEvent *event) 
{ 
    qDebug() << (QString("Mouse move (%1,%2)").arg(event->x()).arg(event->y())); 

    QGraphicsView::mouseMoveEvent(event); 
} 

以及安裝一個事件過濾器

bool Workspace::eventFilter(QObject* obj, QEvent* e) 
{ 
    if(e->type() == QEvent::Enter) 
     qDebug() << "Entered Workspace"; 
} 

我不喜歡默認的「手」的鼠標指針,雖然和我決定改變它使用

this->setCursor(Qt::CrossCursor); 

在我的構造函數。

雖然鼠標指針僅在小部件的第一個像素處變成十字,但會發生什麼情況。當我進一步移動時,它會回到用於表示拖動功能的默認「手形」光標。

爲什麼會發生這種情況,如何將光標更改爲我喜歡的任何內容?

+0

「Workspace」的大小是多少? – 2015-04-02 13:23:10

+0

這取決於窗口大小,從260x260開始。我確實發現了'QApplication :: setOverrideCursor(Qt :: CrossCursor)';'但我不知道它是否是最好的解決方案,但它確實按照它應該做的。 – dearn44 2015-04-02 13:30:07

回答

2

看來,使用

QApplication::setOverrideCursor(Qt::CrossCursor); 

進入widget時,和

QApplication::restoreOverrideCursor(); 
退出時

,做的伎倆。

我不知道爲什麼setCursor沒有工作。

編輯

實際使用上面是不是一個好主意,因爲它更簡單,只需使用

QApplication::changeOverrideCursor(*mCurrentCursor); 

你將不必擔心任何其他這種方式,QT會照顧堆棧入隊/出隊。

+1

如果它做你想要的... :) – 2015-04-02 13:35:01