2017-07-14 4 views
0

Ich arbeite an einem Spiel, das QML für seine Benutzeroberfläche verwendet.Wie werden alle Cursor-Erscheinungen in einem QML-Programm ersetzt?

Ich möchte alle Cursorstile mit einmal ersetzen, die passender zum Spielstil passen (z. B. zeigender Finger anstelle des normalen Qt::ArrowCursor).

QGuiApplication::setOverrideCursor() Nähte Aufruf nicht eine praktische Lösung zu sein, wie ich kann nicht „überschreiben“ jede MouseArea kann replaceCursor() magic-global-Funktion aufzurufen. Zum Beispiel die Änderung Spalte mit Cursor innerhalb einer TableView ist derzeit unmöglich für mich zu manipulieren.

Für mich wäre die praktischste Lösung, das Aussehen aller Cursor zu ersetzen, aber Blatt Qt mit den Aufgaben, um den Cursor-Stil richtig zu wählen.

Danke für jede Hilfe!

Antwort

1

Sie können immer noch QGuiApplication::setOverrideCursor() verwenden, um Ihre Mausbereiche zu dekorieren. Es funktioniert wie ein Stapel, Sie können Cursor setzen und dann wiederherstellen, also beginnen Sie mit dem Setzen eines ersten Cursors von main.cpp, und dann verwenden Sie einen "überladenen" MouseArea, der seinen Cursor unter Verwendung von setOverrideCursor() setzt, anstatt die QML-Funktionalität zu verwenden.

Zum Beispiel:

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

Natürlich, das bedeutet, dass Sie ein Hilfsobjekt muss schaffen, die die Funktionen von C++ aufrufen, und setzen Sie es QML so kann es von dort aufgerufen werden.

+0

Vielen Dank! Genau das mache ich gerade. Aber ich kann 'MouseAreas' nur in meinem eigenen QML-Code manipulieren. Wenn sie versteckt sind und nicht einmal über Delegaten überschrieben werden können, funktioniert dieser Trick nicht. In meinem Fall ändere die Breite Cursor für die Spaltenbreite einer TableView. –

+1

Sie können Stick-Komponenten mit einem deaktivierten Mausbereich überlagern, die immer noch den Trick machen, den Cursor umzuschalten. Es klingt tatsächlich wie ein Fehler, daher dieser Bericht, aber es könnte den Trick für Sie tun. https://bugreports.qt.io/browse/QTBUG-56287 – dtech

Verwandte Themen