2017-07-14 3 views
0

私はそのUIにQMLを使用するゲームに取り組んでいます。QMLプログラム内のすべてのカーソルの外観を置き換えるには?

私はすべてのカーソルスタイルを、ゲームスタイルに一層合ったものに置き換えたいと考えています(例えば、通常のQt::ArrowCursorの代わりに指を指す)。私はかもしれreplaceCursor()魔法-グローバル関数を呼び出すために、各MouseAreaを「上書き」することはできませんとして実用的なソリューションであることがQGuiApplication::setOverrideCursor()縫い目ないを呼び出す

。たとえば、TableViewにカーソルを置いた変更カラムは、現在私が操作することは不可能です。

私にとって最も実用的な解決策は、すべてのカーソルの外観を置き換えることですが、リーフQtはカーソルスタイルを正しく選択するタスクに置き換えます。

ありがとうございました!

答えて

1

QGuiApplication::setOverrideCursor()を使用してマウス領域を飾ることはできます。これはスタックのように動作し、カーソルを設定してから復元することができるので、最初のカーソルをmain.cppに設定してから、を使用してカーソルを設定する「オーバーロード」MouseAreaを使用します。例えば

:もちろん

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

、それはあなたがC++からこれらの関数を呼び出すと、それはそこから呼び出すことができるように、QMLにそれを公開する補助オブジェクトを作成する必要がありますを意味します。

+0

ありがとうございました!それはまさに私が現在やっていることです。しかし私は自分のQMLコードで 'MouseAreas'を操作することしかできません。それらが隠されていて、代理人経由で操作することさえできない場合、このトリックは機能しません。 私の場合は、TableViewの列幅の変更幅のカーソルです。 –

+1

マウス領域が無効になっているスティックコンポーネントをオーバーレイすることができます。マウス領域を使用すると、カーソルを切り替えることができます。それは実際にバグのように聞こえるので、このレポートですが、それはあなたのためのトリックを行うかもしれません。 https://bugreports.qt.io/browse/QTBUG-56287 – dtech

関連する問題