Вы можете определенно иметь экземпляр QApplication
при использовании DLL (это должно быть QApplication
, а не QCoreApplication
, так как вы хотите графический интерфейс на основе виджетов).Он интегрируется в собственный цикл сообщений основного потока.Помните, что для запуска Qt Gui вам нужен только собственный цикл обработки событий - код не должен застрять в QCoreApplication::exec
.Вам нужен экземпляр приложения, и вам нужно его заполнить, вызвав exec
один раз и убедившись, что он возвращается (т. Е. Используя таймер нулевого времени ожидания), но это все.Кроме того, насос сообщений основного потока приложения будет обрабатывать вещи за вас.
Кроме того, для использования сетевых API-интерфейсов вам не нужно зацикливаться на главном потоке - вы можете обрабатывать их в отдельном потоке.
Ваша DLL не будет совместима с консольными приложениями, которые не запускают насос сообщений в главном потоке, но затем вы можете обмануть: в Windows и только в Windows QCoreApplication
и его производныеклассы могут использоваться в любом потоке:)
Вы определенно должны либо статически связать вашу DLL с Qt, либо использовать динамически связанный Qt, который был помещен в уникальное пространство имен.Помните, что если приложение, с которым вы связываете, использует Qt, нет абсолютно никаких гарантий того, что созданный ими Qt совместим с бинарным кодом используемого вами Qt.Даже если это та же версия.