Я пытаюсь использовать Qt в качестве библиотеки (по аналогии с this), потому что я хочу, чтобы повторно использовать классы Qt в некоторых в настоящее время не-Qt приложений, а также в общих библиотеках, как кросс-платформенного клей. Все это не GUI.QtCore зависимость от QCoreApplication
Некоторые проблемы легко избежать DirectConnection, некоторые из них могут быть решены с помощью частных петель событий, даже один может работать в потоке с fake QCoreApplication и он работает (последний курорт).
Я хочу знать, какие модули полагаются на работающий экземпляр QCoreApplication и не могут работать без него.
Некоторые из модулей Qt (в QtCore) действительно нуждается в экземпляре QCoreApplication для правильной работы. Например, QTimer полагается на QCoreApplication для отправки событий таймера. Я читал documentation for QtConcurrentRun и, похоже, полагался на глобальный экземпляр QThreadPool. Я собираюсь попробовать и посмотреть, действительно ли выполнение приложения жизненно важно, или, может быть, экземпляр создается при первом доступе или, может быть, нет.
Я собираюсь изучить QCoreApplicationPrivate источник (Windows и Linux на данный момент), но любые подсказки в правильном направлении приветствуются.
Каковы другие функциональные зависимости для основного приложения? Обратите внимание, что это может зависеть от ОС.
Редактировать 1: Спасибо, ответ Кубы. Кажется QCoreApplication цикл событий не требуется для отправки событий таймера и сокета. Так что некоторые модули QtCore требуют и экземпляр QCoreApplication, но нет необходимости иметь запущенный цикл событий приложения.
+1 для понимания. Некоторым из функций QCore может понадобиться только не-NULL * QCoreApplication :: instance() *, но не обязательно цикл цикла. Некоторым (например, таймеру) нужен цикл событий приложения. – dashesy
Я не думаю, что это верно, что таймерам нужен цикл событий приложения. Таймеру нужен только цикл выполнения событий в потоке, в котором вы потребляете выход таймера. Если у вас есть QObject в потоке B и QApplication в потоке A, вы можете использовать QTimer в потоке B, подключить его сигнал 'timeout()' к вашему слоту экземпляра QObject. Конечно, вы должны запустить цикл событий в потоке B. –
это то, что говорится в комментариях в QCoreApplication: QCoreApplication содержит основной цикл событий, в котором обрабатываются и отправляются все события из операционной системы (например, таймер и сетевые события) и . – dashesy