Подавить предупреждение "QApplication не был создан в потоке main()"
Я создал сетевую библиотеку на основе Qt для использования с приложениями, которые не запускают цикл событий Qt, и которые не обязательно являются приложениями Qt. Это стало возможным благодаря созданию QCoreApplication
Экземпляр в потоке в ответ на вопрос Можно ли создавать локальные циклы событий без вызова QApplication::exec()?
Это работает отлично, но это расстраивает Qt (я предполагаю, что беспокоюсь, что я попытаюсь манипулировать GUI вне основного потока, который не будет работать, но я не работаю), и поэтому выводит предупреждение: WARNING: QApplication was not created in main() thread
,
Я хотел бы подавить это предупреждение, которое в противном случае будет напечатано на консоли X11 и, скорее всего, заставит моих пользователей вводить кучу ненужных недостатков. Тем не менее, я хотел бы просто подавить эту ошибку, так как я использую qDebug
для некоторых законных целей и хотят видеть будущие предупреждения. Есть ли способ сделать это, как какой-то Qt #pragma
?
РЕДАКТИРОВАТЬ:
Подобный вопрос был задан ранее здесь: консольное приложение Qt "ПРЕДУПРЕЖДЕНИЕ: QApplication не было создано в потоке main()", но в основном ответом был просто обзор кода без каких-либо значимых идей для подавления предупреждения.
1 ответ
Проблема возникает потому, что вы касаетесь API Qt (в основном потоке или просто в каком-то потоке) перед созданием QApplication. Вы не можете сделать это. В частности, вы создаете QObject некоторого вида, который устанавливает в Qt то, что сам Qt должен рассматривать как main
нить.
Единственные API Qt, которые вам разрешено использовать перед созданием QApplication, - это те, которые явно документированы, чтобы быть безопасными в этом сценарии.
Итак: не делай этого. Сначала создайте QCoreApplication, а затем вы можете приступить к работе.