Повторное использование модуля QtCore в любом проекте C ++ - PullRequest
2 голосов
/ 02 ноября 2011

Я очень заинтересован в повторном использовании системы метаобъектов и общей функциональности, но точно не знаю:

  • Имеет ли QMetaObject :: invokeMethod () зависимость от цикла событий?
  • Могу ли я загружать плагины без экземпляра QCoreApplication?
  • ...

Был бы весьма признателен за некоторые ограничения использования этого модуля в не qt-приложении / в неосновном потоке.

ОБНОВЛЕНИЕ:

Я отправил тот же вопрос в сообщество Qt.

1 Ответ

0 голосов
/ 25 сентября 2013

Работающий цикл обработки событий является необязательным и предназначен для каждого потока. Если вы не обрабатываете события в данном потоке, он не нужен.

invokeMethod не имеет зависимостей от цикла событий, если вы вызываете методы для объектов, которые живут в потоке, где вы вызываете этот метод. Если вы вызываете методы для объектов, которые живут в других потоках, указанные потоки должны будут запускать цикл событий, даже если только периодически. В конце концов, они могут позвонить processEvents в четко определенных точках. Вызов слота между потоками эквивалентен публикации события в очереди событий потока.

Я проверю, работает ли механизм плагинов без экземпляра QCoreApplication, но этот экземпляр вам не повредит. Просто создай это и забудь об этом. Вы не должны запускать цикл обработки событий в основном потоке или в любом другом потоке.

Обратите внимание, что QPluginLoader - это не то же самое, что QLibrary, вам нужно изучить свои потребности и выяснить, какие вы хотите.

Не-графический пользователь QCoreApplication может быть создан в произвольном потоке , и его цикл обработки событий может выполняться там. В Windows QApplication также может быть создан в произвольном потоке.

...