Ich habe eine Qt-basierte Netzwerkbibliothek zur Verwendung mit Anwendungen erstellt, die keine Qt-Ereignisschleife ausführen und die nicht unbedingt Qt-Anwendungen sind. Möglich wurde dies durch eine QCoreApplication
Instanz in einem Thread zu schaffen pro Antwort von Is it possible to create local event loops without calling QApplication::exec()?Warnung unterdrücken "QApplication wurde nicht im main() -Thread erstellt"
Die perfekt funktioniert, aber es macht Qt Verstimmung (ich nehme an es ist besorgt, dass ich werde versuchen, ein GUI außerhalb des Haupt-Thread zu manipulieren, die würde nicht funktionieren, aber ich bin nicht), und so druckt es eine Warnung: WARNING: QApplication was not created in main() thread
.
Ich möchte diese Warnung unterdrücken, die sonst auf der X11-Konsole gedruckt wird und höchstwahrscheinlich meine Benutzer dazu bringen, eine Reihe von unnötigen Mängeln einzugeben. Ich möchte jedoch nur DIESE Fehler unterdrücken, wie ich qDebug
für einige legitime Zwecke verwenden und zukünftige Warnungen sehen möchten. Gibt es eine Möglichkeit, dies zu tun, wie eine Art Qt #pragma
?
EDIT:
Eine ähnliche Frage vor hier gefragt wurde: Qt console application "WARNING: QApplication was not created in the main() thread", aber die Antwort war im Grunde nur ein Code-Review ohne sinnvolle Ideen, um die Warnung zu unterdrücken.
Ich denke, das Problem entsteht, weil Sie Qt APIs berühren (im Hauptthread oder nur in * einigen * thread), bevor Sie QApplication erstellen. Das können Sie nicht tun (Modulo-Sachen, die vor QApplication gemacht werden sollen). Insbesondere erstellen Sie QObjects. – peppe
hmm, das erzeugt ein interessantes Henne-Ei-Problem, weil die Klasse, die ich zum Erstellen des 'QCoreApplication'-Threads verwende, selbst ein' QObject' ist, da es Signale benötigt, um mit Sockets in untergeordneten Threads zu kommunizieren. –
Nun, teilen Sie es einfach? Behalten Sie diese Klasse mit der Logik bei und erstellen Sie eine andere Klasse, die QCoreApplication UND ein Objekt Ihrer Klasse erstellt. – peppe