2012-03-25 164 views
2

我有項目委託,當鼠標事件結束圖標時,我將其光標更改爲Qt :: PointingHandCursor 當它關閉時,我將其設置回Qt :: ArrowCursor。它的工作正常。
問題是,除了它在圖標上時。它總是堆疊在Qt :: ArrowCursor 上,即使在圖標需要像本地調整窗口大小或通過本機按鈕時那樣改變的情況下。它總是Qt :: ArrowCursor。
當它不在圖標上時,我該如何強制光標正常動作?
這裏是我做的:Qt鼠標光標重置

​​

回答

4

您需要使用restoreOverrideCursor()給每個呼叫撤消setOverrideCursor()。從文檔:

http://doc.qt.io/archives/qt-4.7/qapplication.html#setOverrideCursor

應用遊標被存儲到內部棧中。 setOverrideCursor()將光標推入堆棧,並且restoreOverrideCursor()將活動光標彈出堆棧。 changeOverrideCursor()更改當前活動的應用程序 覆蓋光標。每一個setOverrideCursor()必須最後被相應的restoreOverrideCursor()跟在 之後,否則堆棧將永遠不會被清空。

你必須弄清楚究竟是如何使這項工作在你的代碼(這是不完全清楚自己想要什麼樣的行爲),但你可以通過更換該else條款

{ 
    Qt::CursorShape shape = Qt::ArrowCursor; 
    QApplication::setOverrideCursor(QCursor(shape)); 
} 

啓動

{ 
    QApplication::restoreOverrideCursor(); 
}