Ho creato una libreria di rete basata su Qt da utilizzare con applicazioni che non eseguono un ciclo di eventi Qt e che non sono necessariamente altrimenti applicazioni Qt. Ciò è stato reso possibile con la creazione di un'istanza QCoreApplication
in un thread per la risposta da Is it possible to create local event loops without calling QApplication::exec()?Avviso di soppressione "QApplicazione non creata nel filetto principale()"
Questo funziona perfettamente, ma rende sconvolto Qt (presumo che è preoccupato che cercherò di manipolare una GUI di fuori del filo principale che non funzionerebbe, ma non lo sono), quindi stampa un avviso: WARNING: QApplication was not created in main() thread
.
Vorrei eliminare questo avviso che altrimenti verrà stampato sulla console X11 e molto probabilmente causerà ai miei utenti un sacco di inutili carenze. Tuttavia, mi piacerebbe solo sopprimere l'errore THIS, perché io uso qDebug
per alcuni scopi legittimi e voglio vedere gli avvisi futuri. C'è un modo per farlo, come una sorta di Qt #pragma
?
EDIT:
Una domanda simile è stato chiesto prima qui: Qt console application "WARNING: QApplication was not created in the main() thread", ma la risposta era fondamentalmente solo una revisione del codice senza idee significativi per eliminare l'avviso.
Penso che il problema si pone perché si stanno toccando le API Qt (nel thread principale, o solo in * qualche * thread) prima di creare QApplication. Non puoi farlo (materiale modulo che dovrebbe essere fatto prima di QApplication). In particolare, stai creando QObjects. – peppe
hmm, che crea un interessante problema uovo di gallina, perché la classe che uso per creare il thread 'QCoreApplication' è a sua volta un' QObject' perché ha bisogno di usare i segnali per comunicare con i socket nei thread figli. –
Beh, basta dividerlo? Mantieni quella classe con la logica e crea un'altra classe che crei QCoreApplication AND un oggetto della tua classe. – peppe