crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> окно в динамической библиотеке
Sami
  опции профиля:
сообщение 6.5.2008, 12:52
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 28.4.2008
Пользователь №: 160

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть проги которые написаны на различных библиотеках (MFC, OWL и тд)
Все они юзают одну длл, которая при этом может выводить окно с текстом и реагировать на клавиатуру.
QApplication должен быть создан в первом потоке.
И как быть, если вызвать QApplication в первом потоке длл не может, да и не уверен, что длл вызывают из первого.
Что делать? Менять QT на что-то другое?

И кстати а почему QApplication должен быть создан только в main (). С чем это связано?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 6.5.2008, 13:32
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


А зачем тебе вызывать в QApplication из DLL?
В DLL можно ведь просто создавать окно, а вызывать его из exe'шника, предварительно передав ему родителя если нужно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sami
  опции профиля:
сообщение 6.5.2008, 17:04
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 28.4.2008
Пользователь №: 160

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 6.5.2008, 16:32) *
А зачем тебе вызывать в QApplication из DLL?
В DLL можно ведь просто создавать окно, а вызывать его из exe'шника, предварительно передав ему родителя если нужно.

exe'шник понятия не имеет про QT и QApplication, он давно написан сторонними разработчиками.

Если убрать класс QApplication из DLL, то при создании QWidget выдает:
QWidget: Must construct a QApplication before a QPaintDevice.

Поэтому засунул QApplication в отдельный поток, при этом стало выдаватся сообщение:
WARNING: QApplication was not created in the main() thread.
Мож мне этот варнинг игнорировать?
На что может сказаться этот варнинг?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 7.5.2008, 10:23
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Если окно модальное - то не парься - создавай QApplication в главном потоке, показывай своё окно.
При закрытии - удаляй окно и удаляй QApplication.

Если окно не модальное, то смотри в сторону Qt/MFC Migration Framework. Там есть QMfcApp - который корректно работает в главном потоке совместно с остальными Framework-ами, QWinWidget - который может быть дитём WinApi окна и QWinHost - который может быть родителем для WinApi окна.

Я использовал Qt/MFC Migration Framework для написания плагинов к приложению на delphi.
Правда потом получилось преобразовать работу по 1му варианту. :)

Сообщение отредактировал Tonal - 7.5.2008, 10:25
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sami
  опции профиля:
сообщение 13.5.2008, 15:30
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 28.4.2008
Пользователь №: 160

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Tonal @ 7.5.2008, 13:23) *
Если окно модальное - то не парься - создавай QApplication в главном потоке, показывай своё окно.
При закрытии - удаляй окно и удаляй QApplication.

Если окно не модальное, то смотри в сторону Qt/MFC Migration Framework. Там есть QMfcApp - который корректно работает в главном потоке совместно с остальными Framework-ами, QWinWidget - который может быть дитём WinApi окна и QWinHost - который может быть родителем для WinApi окна.

Я использовал Qt/MFC Migration Framework для написания плагинов к приложению на delphi.
Правда потом получилось преобразовать работу по 1му варианту. :)


Для WinApi понятно. И большое спасибо.
А как обстоит дело в Linux'е.
Там хоть DLL нет, но есть разделяемые библиотеки.
Можно ли такую ситуацию скомпилить на linux?
Скоро по видимому этот вопрос встанет.
Тобишь есть прога которая вызывает сошку, которая показывает не модальное окно. Что прога юзает GTK, QT, ncurses или что-то другое заранее не известно.
Причина редактирования: сервер притормаживает :(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 14.5.2008, 7:20
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Ну если ncurses, то там и X-ы могут быть не запущены - тады ты никакое окошко вестимо не покажешь. :)
С остальным - не в курсе. С модальным вроде должно проканать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sami
  опции профиля:
сообщение 14.5.2008, 9:00
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 28.4.2008
Пользователь №: 160

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Tonal @ 14.5.2008, 10:20) *
Ну если ncurses, то там и X-ы могут быть не запущены - тады ты никакое окошко вестимо не покажешь. :)
С остальным - не в курсе. С модальным вроде должно проканать.


А как насчет цикла QApplication в linux'е?
Я вот так и непонял зачем нужен цикл QApplication в главном потоке делать.
По идеи все потоки равнозначны, ежели им приоритет не менять.
Так какая разница?
Или до первого легче добратся?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 14.5.2008, 10:46
Сообщение #8


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Все потоки в приложении равны, но один - ровнее. :)
Мне кажется, это связано с передачей сигналов между потоками.
Если я правильно помню (смотрел как-то в коде, но могу и ошибаться) они идут через очередь главного потока.
Ну и добраться видимо легче. :)
См. http://www.linuxcenter.ru/lib/articles/lxf/linapi7.phtml
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 12:48