Utworzono bibliotekę sieci opartą na Qt do użytku z aplikacjami, które nie są uruchomione z pętlą zdarzeń Qt i które niekoniecznie są aplikacjami Qt. Było to możliwe poprzez utworzenie instancji QCoreApplication
w wątku na odpowiedź od Is it possible to create local event loops without calling QApplication::exec()?Usunięcie ostrzeżenia "Aplikacja QApplication nie została utworzona w wątku głównym()"
Działa to doskonale, ale to sprawia, że Qt zdenerwowany (przypuszczam, że martwi się, że będę próbować manipulować GUI poza głównym wątku nie zadziałałoby, ale ja nie), a więc wyświetla ostrzeżenie: WARNING: QApplication was not created in main() thread
.
Chciałbym ukryć ostrzeżenie, które w przeciwnym razie zostanie wydrukowane na konsoli X11 i najprawdopodobniej spowoduje, że moi użytkownicy wprowadzą mnóstwo zbędnych braków. Chciałbym jednak po prostu tłumaczyć błąd THIS, ponieważ używam qDebug
dla niektórych legalnych celów i chcę zobaczyć przyszłe ostrzeżenia. Czy istnieje sposób, aby to zrobić, jak jakiś Qt #pragma
?
EDIT:
Podobny pytano zanim tutaj: Qt console application "WARNING: QApplication was not created in the main() thread", ale odpowiedź była w zasadzie tylko przegląd kod bez żadnych sensownych pomysłów tłumić ostrzeżenie.
Myślę, że problem powstaje, ponieważ dotykasz API Qt (w głównym wątku lub po prostu * w * wątku) przed utworzeniem QApplication. Nie możesz tego zrobić (rzeczy modulo, które powinny zostać wykonane przed QApplication). W szczególności tworzysz obiekty QObjects. – peppe
hmm, co tworzy interesujący problem z jajkami kurzymi, ponieważ klasa, której używam do stworzenia wątku 'QCoreApplication', sama jest' obiektemObiektu', ponieważ musi używać sygnałów do komunikowania się z gniazdami w wątkach potomnych. –
Cóż, po prostu podzielić? Zachowaj tę klasę za pomocą logiki i utwórz kolejną klasę, która tworzy QCoreApplication AND obiekt twojej klasy. – peppe