Qt für Embedded-Linux: Hide cursor auf Start
Ich bin die Entwicklung einer Qt-Anwendung auf einem linux-embedded-system.
Das system hat einen touchscreen, sondern auch ein USB-OTG-port, und es muss mit einer Maus benutzbar.
Also mein problem ist, wenn die Anwendung gestartet wird, zeigt es einen Maus-cursor in der Mitte des Bildschirms, und dann es verschwindet, wenn mein Haupt-windows paint-Ereignis Auftritt.
Wenn die Anwendung gestartet wurde, kann ich das anzeigen/verstecken der cursor, wenn eine Maus angeschlossen ist, das funktioniert gut, aber ich habe immer den cursor während der Inbetriebnahme.
Habe ich versucht:
QWSServer::setCursorVisible(false);
oder:
qApp->setOverrideCursor(QCursor(Qt::BlankCursor));
und das Ergebnis ist das gleiche, wie oben beschrieben.
Die einzige Möglichkeit, die ich gefunden, um den cursor ausblenden beim Start der Kompilierung von Qt ohne den Cursor, aber dann kann ich keinen cursor, wenn die Maus angeschlossen ist (das ist Logik...).
Also, wenn Sie eine Idee haben, wäre ich glücklich, es zu Lesen 🙂
Dank,
Sylvain
BEARBEITEN:
Okey also das ist der QWS-Server, zeigt den cursor auf Start, fand ich, dass in qt/src/gui/embedded/qwscursor_qws.cpp:
void QWSServerPrivate::initializeCursor()
{
Q_Q(QWSServer);
//setup system cursors
#ifndef QT_NO_QWS_CURSOR
// qt_screen->initCursor(sharedram + ramlen,true);
//default cursor
cursor = 0;
setCursor(QWSCursor::systemCursor(Qt::ArrowCursor));
#endif
q->sendMouseEvent(QPoint(swidth/2, sheight/2), 0);
}
Nun, wenn ich den Kommentar der "setCursor" Anweisungen, das löst das problem, aber das ist irgendwie hässlich, zu Bearbeiten Qt-Quellcode zu tun, dass, so dass, wenn Sie habe eine bessere Lösung...
- Sollten Sie nicht in der Lage sein zu rufen
qApp->setOverrideCursor()
bereits in Ihrem main.cpp Datei vor dem AufrufqApp->exec()
? Auf diese Weise sollten Sie nicht sehen Sie den cursor auf Start. - Das ist, was ich Tat, aber der cursor erscheint nach dem Aufruf von "app = new QApplication(qtArgc, qtArgv);". Ich denke, es wird angezeigt, wenn der QWS-Server gestartet wird.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Funktioniert dies nicht mit Qt5; aber aus der Frage zu sein scheint Qt4 mit QWS. Die code-Sequenz,
arbeiten mit Qt4.x Verwendung QWS. Ein wichtiger Punkt zu beachten ist, dass nur die server kann dies tun. Dh, das Programm aufgerufen wird, mit
-qws
. Wenn Sie mehrere Anwendungen auszuführen, die Kunden werden nicht in der Lage sein zu deaktivieren, den cursor.Sollte dies nach die QApplication aufgebaut ist, aber vor dem ersten show() oder showFullScreen(). Sie wahrscheinlich versuchen, dies zu tun, bevor die QApplication aufgebaut ist.
Edit:, Wie Sie scheinen zu bedeuten, wenn die Anwendung zeigt zunächst,
Hinzufügen
#define QT_NO_QWS_CURSOR 1
zu einem MyQconfig - Datei und übergeben es an./configure
mit der-qconfig MyQconfig
option. Oder Sie kann mit dem grafischen toolqconfig
anpassen Qt.qconfig
findet sich im tools-Verzeichnis. Eine Liste der Elemente, die gefunden wird in src/corelib/global/qfeatures.txt. Sehen Fine-tuning Qt für mehr.app = new QApplication(qtArgc, qtArgv); QWSServer::setCursorVisible(false); windows = new MainWindows(); windows->show(); return app->exec();
und es funktioniert nicht, weil der cursor angezeigt wird, durch die QWSServer, wenn die Anwendung erstellt wird, so, bevor Sie kamen zurück von den "neuen QApplication", so der cursor angezeigt wird und dann verschwindet, wenn das Haupt-Fenster wird angezeigt.