Полностью упаковать графическое приложение в DLL |
Здравствуйте, гость ( Вход | Регистрация )
Полностью упаковать графическое приложение в DLL |
__UNIX_hokum |
15.7.2009, 8:34
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 4.5.2009 Пользователь №: 727 Спасибо сказали: 0 раз(а) Репутация: 0 |
Доброго времени суток. Пытаюсь сделать следующее: в DLL находится класс, наследованный от QThread, в методе run которого на стеке создаётся экземпляр QApplication и какой-нить QWidget. Из DLL наружу отдаётся экземпляр этого класса, с которым можно работать через интерфейс программе, "не знакомой" с Qt. Всё это безобразие компилируется, запускается, и не работает со следующим предупреждением: "QApplication was not created in the main() thread".
Интернеты сказали следующее: "If you need to marshall widget creation across threads (e.g. thread B wants thread A to create a widget, and must wait for the widget), then you want to make sure to run QEventLoops while you're waiting. That'll make sure any cross-thread QEvents get processed" (http://www.qtforum.org/article/22708/qappl...n-instance.html). Но что-то я не соображу, куда и как этот совет приделать. Если у кого будут соображения по этому поводу -- рад услышать. |
|
|
sploid |
15.7.2009, 13:06
Сообщение
#2
|
Студент Группа: Участник Сообщений: 51 Регистрация: 26.2.2008 Из: Москва Пользователь №: 106 Спасибо сказали: 10 раз(а) Репутация: 1 |
еще раз из доки:
In addition, you must create the QApplication (or QCoreApplication) object before you can create a QThread. У тебя же в коде, QThread создается до создания QCoreApplication. Кстати библиотеки грузятся до захода в main, так что не факт что инициализировались нужные переменные. Все что ты делаешь "может работать", а "может и не работать". Это все хак, никто не гарантирует что это будет работать. Т.е. под VS2005 будет работать, а под VS2008 может не работать. Или может работать по другому с переходом на другую версию Qt. Такие штуки можно делать только для развлечения, но не для разработки серьезного софта. |
|
|
Текстовая версия | Сейчас: 28.1.2025, 19:39 |