2017-07-14 36 views
0

我正在開發一個爲其UI使用QML的遊戲。如何替換QML程序中的所有光標外觀?

我想用一次更適合遊戲風格(例如指向手指而不是正常的Qt::ArrowCursor)替換所有遊標樣式。

調用QGuiApplication::setOverrideCursor()接縫是一個實用的解決方案,因爲我不能「覆蓋」每個MouseArea通話的對象可能replaceCursor()魔全球的功能。例如,在TableView內光標的更改列目前不可操作。

對我來說,最實際的解決方案是替換所有遊標的外觀,但葉Qt與正確選擇光標樣式的任務。

感謝您的幫助!

回答

1

您仍然可以使用QGuiApplication::setOverrideCursor()來裝飾鼠標區域。它可以像堆棧一樣工作,您可以設置並恢復遊標,因此您可以從main.cpp開始設置初始光標,然後使用「重載」MouseArea,它也使用setOverrideCursor()來設置其光標,而不是使用QML功能。

例如:

onContainsMouseChanged: { 
    if (containsMouse) Sys.setOverrideCursor(yourCursortype) 
    else Sys.restoreOverrideCursor() 
} 

當然,這意味着你將必須創建輔助對象,將調用從C++的那些功能,並使其暴露於QML,因此它可以從那裏被調用。

+0

謝謝!這正是我目前正在做的。但我只能在我自己的QML代碼中操作'MouseAreas'。如果他們被隱藏起來,甚至無法通過委託覆蓋來操作,這個技巧是行不通的。 在我的情況下,更改寬度光標的TableView的列寬。 –

+1

您可以使用禁用的鼠標區域來覆蓋手柄組件,該區域仍然可以切換光標。它實際上聽起來像一個錯誤,因此這個報告,但它可能會爲你做的伎倆。 https://bugreports.qt.io/browse/QTBUG-56287 – dtech