crossplatform.ru

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

> dll и GUI
Гость_Евгений_*
сообщение 28.11.2008, 1:23
Сообщение #1





Гости








    


Всем доброго времени суток.

Я несколько лет писал разные проги с использованием MFC. и сейчас в качестве познавания нового решил переписать один проект на QT. Поставил QT версии 4.4.0, пересобрал статически под vs2005. все компилится, линкуется, ок. Возник следующий вопрос. Вообще QT позволяет внутри динамических библиотек создавать ГУИ? Или нет? У меня есть гланое окно (которое наследуется от QMainWindow). На него кладу дерево и таб через сплиттер. В дерево помещаются грубо говоря названия библиотек, подключаемых к программе. А в табы передаются указатели на классы, реализованные в dll, производные от QDialog.

Так вот, в библиотеке есть экспортируемая функция, при вызове которой создается класс, в конструкторе которого создаются объекты диалоговых окон. Затем указатели на эти объекты передаются в главное приложение и кладутся в QTabWidget. (это по задумке). На деле ни хрена не работает. При попытке создать экземпляр диалогового окна в dll вылетает ошибка что qpaintDevice или как то так должен быть создан до QApplication. Вобщем, если перед созданием моего диалоговго окна создать экземпляр QApplication (хотя мне не понятно чем он будет отличаться от того, который реализован в функции main в главном приложении и зачем его создавать еще раз), то все путем (на время). Т.е. диалоговое окно вроде как создается, а когда я его уже в главном приложении пытаюсь добавить в качестве дочернего виджета в сплиттер, вылетает ошибка что нельзя добавлять виджеты, созданные в разных потоках. Вот это чесгря вообще не понятно, как это так... Поток я не создаю, библиотека вроде как должна грузиться в адресное пространство главного приложения. Такие ограничения как-то непонятны.... Вроде все хвалят qt, а неужели он такого не позволяет? Уважаемые эксперты, поделитесь пожалуйста тонкостями, как такое реализовать?

Имеется еще одна неясность: В винде если писать dll средствами winAPI, надо объявлять функцию DllMain, которая вызывается при загрузке библиотеки.... А в случае работы с QT? Как тут? Есть 2 книжки, но как-то там стороной обходится этот вопрос.... Пробовал просто main писать, но она не вызывается ни разу. Может сигнатура должна быть другая? Или имя?

Вобщем основной вопрос у меня такой, можно ли при использовании qt писать плагины, содержащие ГУИ? При этом ГУИ такие, что основное приложения естесственно ничего и не знает о плагинах? но при этом его окно является родителем окнам, созданным в плагинах?

Заранее большое спасибо за ответы!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Rocky
  опции профиля:
сообщение 24.12.2008, 0:12
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Все, разобрался.... практически. vcapp почему-то не хочет кушать, ну и хрен с ним. Я взял уже готовый проект из их примеров, поменял в нем имена, основные принципы понял. Как сделать чтобы метаобъектные файлы генерились тоже вроде понятно. Правда руками такое тяжело писать... столько ключей всяких.. И это надо не забывать дописывать custom build в каждом файле, в котором определен класс с макросом Q_OBJECT. Да и генерятся они почему-то постоянно, даже если я ничего не изменял (так же, как и генерируется файл из ui постоянно, при каждом запуске приложения из-под среды). Ну это ладно... Основная проблема решилась. msvc2005+shared qt+visual assist. Остановился на таком варианте. По-поводу самого сабжа для тех кто будет читать, если qt собирать не статически, то неважно где что определено. в dll можно создавать любые виджеты, добавлять их в качестве дочерних виджетам, созданным в других dll или exe. Все очень классно работает.

Большое спасибо ViGOur, Litkevich Yuriy! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 22.12.2024, 13:01