2011-03-28 130 views
3

如何在執行拖動操作時設置Qt中使用的光標?我正在使用QDrag類。功能setCursor需要一個像素圖,無法指定熱點,文檔也沒有指定它可以覆蓋「無操作」光標。Qt設置自定義拖動光標?

我很高興如果我可以在mouseMoveEvent中做一個明確的光標,但我不知道如何在拖動操作。

回答

3

檢查它的源代碼Qt在這方面是蹩腳的,並沒有機制來做到這一點。對於X11代碼,函數QDragManager::updateCursor包含它使用的遊標的變量。這些是使用具有恆定熱點值(0,0)的QCursor構造函數創建的。 ForbiddenCursor是完全硬編碼的,因此可以防止任何變化。

要設置光標,請調用QApplication::changeOverrideCursor。作爲靜態函數,無法攔截該呼叫。


即使設置了pixmaps(通過setCursor),初始拖動光標仍然是默認值。這似乎是QT中的一個缺陷。 這是在qdnd_x11.cpp:1948,指針光標強制設定在拖動

的開始。因此存在使用自定義光標爲標準拖歐米茄下降沒有實際的辦法。

+0

http://doc.trolltech.com/4.7/qdrag.html但接口非常看起來你可以做到這一點。 setHotSpot和setDragCursor? – 2011-03-28 15:24:32

+0

你正在使用哪個Qt版本? – 2011-03-28 15:25:35

+0

我正在使用4.6,但它有相同的接口。該熱點與遊標函數無關,它爲setPixmap中的像素圖所在的位置設置偏移量。我在bug數據庫中查找了這個問題,實際上有很多相關的問題。 – 2011-03-28 16:42:10