![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Гость_Гость_heiheshang_*_* |
![]()
Сообщение
#1
|
Гости ![]() |
Проблема в следующем, ни как не могу слинковать код. В qtcreator есть библиотека libDuiEditor. Я ее подключаю к своему проекту. Код компилируется, но линковщик в упор не хочет видеть этот модуль.
Может я чего-то не понимаю ?
Вот код самого модуля
|
|
|
![]() |
SABROG |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Покажи .pro файл.
|
|
|
Гость_Гость_heiheshang_*_* |
![]()
Сообщение
#3
|
Гости ![]() |
|
|
|
frg10 |
![]()
Сообщение
#4
|
Студент ![]() Группа: Участник Сообщений: 47 Регистрация: 8.11.2009 Из: Ростов-на-Дону Пользователь №: 1213 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Может я чего-то не понимаю ? DuiEditor::Internal::DuiEditorPlugin *plugin =new DuiEditor::Internal::DuiEditorPlugin(); Вроде инстансы плагинов не создаются вручную. Нужно использовать QPluginLoader. Вобщем смотри ассистант. Еще можно попробовать добавить к описанию класса Q_DECL_EXPORT/IMPORT чтобы сделать его интерфейс видимым снаружи. Но при этом нужно будет пересобрать либу. |
|
|
Гость_Гость_heiheshang_*_* |
![]()
Сообщение
#5
|
Гости ![]() |
Может я чего-то не понимаю ? DuiEditor::Internal::DuiEditorPlugin *plugin =new DuiEditor::Internal::DuiEditorPlugin(); Вроде инстансы плагинов не создаются вручную. Нужно использовать QPluginLoader. Вобщем смотри ассистант. Еще можно попробовать добавить к описанию класса Q_DECL_EXPORT/IMPORT чтобы сделать его интерфейс видимым снаружи. Но при этом нужно будет пересобрать либу. Да руками не создаются, делаю так
Получаем ошибку линковки
|
|
|
frg10 |
![]()
Сообщение
#6
|
Студент ![]() Группа: Участник Сообщений: 47 Регистрация: 8.11.2009 Из: Ростов-на-Дону Пользователь №: 1213 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
ИМХО без правки исходников не обойтись. Дело в том, что если вы хотите использовать какой-то класс определенный в динамической библиотеке, этот класс должен из нее экспортироваться. Т.е. класс должен быть объявлен так:
Подробности в Creating Shared Libraries Ну и пересобрать нужно будет этот плагин. И линковать нужно будет статически через -lDuiEditor. А вообще, зачем вам доступ к классу DuiEditorPlugin? Если вам нужно его инициализировать, то нужно кастить его к ExtensionSystem::IPlugin. А доступ ко всем объектам, которые он предоставляет, осуществляется через ExtensionSystem::PluginManger. |
|
|
Гость_Гость_heiheshang_*_* |
![]()
Сообщение
#7
|
Гости ![]() |
ИМХО без правки исходников не обойтись. Дело в том, что если вы хотите использовать какой-то класс определенный в динамической библиотеке, этот класс должен из нее экспортироваться. Т.е. класс должен быть объявлен так:
Подробности в Creating Shared Libraries Ну и пересобрать нужно будет этот плагин. И линковать нужно будет статически через -lDuiEditor. А вообще, зачем вам доступ к классу DuiEditorPlugin? Если вам нужно его инициализировать, то нужно кастить его к ExtensionSystem::IPlugin. А доступ ко всем объектам, которые он предоставляет, осуществляется через ExtensionSystem::PluginManger. Может сам класс мне и не нужен, главное получить его функционал,если подскажите как им воспользоваться буду благодарен. |
|
|
frg10 |
![]()
Сообщение
#8
|
Студент ![]() Группа: Участник Сообщений: 47 Регистрация: 8.11.2009 Из: Ростов-на-Дону Пользователь №: 1213 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Может сам класс мне и не нужен, главное получить его функционал,если подскажите как им воспользоваться буду благодарен. Я могу вам посоветовать подробнее разобраться с архитектурой QtCreator. Мне очень помог документ Writing Qt Creator Plugin. Как понятно из названия, там описывается как писать собственные плагины, ну и параллельно разбирается архитектура. А дальше нужно просто брать исходники самого креатора и разбираться. ![]() P.S. Еще могу посоветовать сгенерировать документацию по QtCreator Doxygen-ом. Очень помогает. ![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
heiheshang, что-то я в Git-хранилище этого DuiEditor не вижу. Может прибили уже?
|
|
|
Гость_Гость_heiheshang_*_* |
![]()
Сообщение
#10
|
Гости ![]() |
Может сам класс мне и не нужен, главное получить его функционал,если подскажите как им воспользоваться буду благодарен. Я могу вам посоветовать подробнее разобраться с архитектурой QtCreator. Мне очень помог документ Writing Qt Creator Plugin. Как понятно из названия, там описывается как писать собственные плагины, ну и параллельно разбирается архитектура. А дальше нужно просто брать исходники самого креатора и разбираться. ![]() P.S. Еще могу посоветовать сгенерировать документацию по QtCreator Doxygen-ом. Очень помогает. ![]() Просмотр ничего не дал, так и осталось неясным как методы вызывать плагина. |
|
|
frg10 |
![]()
Сообщение
#11
|
Студент ![]() Группа: Участник Сообщений: 47 Регистрация: 8.11.2009 Из: Ростов-на-Дону Пользователь №: 1213 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Disclaimer: пишу все чисто теоретически - на практике ничего из нижеперечисленного не делал.
Если вы действительно хотите взяться за это, то приготовьтесь потянуть себе много всего из QtCreator. Вот мне кажется минимум: 1) ExtensionSystem - загрузка и управление плагинами 2) Aggregation - аггрегация объектов 3) CorePlugin - собственно ядро QtCreator. Требуется для работы любого плагина. 4) TextEditor - требуется для DuiEditor 5) Find, QuickOpen - требуются для TextEditor 6) Сам DuiEditor Далее приготовьтесь: 1) Необходимо загрузить и инициализировать все плагины. Этим занимается PluginManager из ExtensionSystem. Как это делается можно посмотреть в qtcreator/app/main.cpp. 2) Core при загрузке создает главное окно приложения. Т.е. создастся окно QtCreator с меню и панельками. 3) Когда плагин инициализируется, он регистрирует все объекты, которые предоставляет, в PluginManager. Соответственно, если вы хотите использовать этот функционал, то вам нужно получать эти объекты из PluginManager-а или можно воспользоваться интерфейсом ICore. Второй вариант гораздо проще. Конкретно DuiEditor экспортирует: - фабрику классов для создания редакторов. - визард для создания QML файлов - объект Code Completion - подсветку редактора Для примера, допустим что вам нужно открыть редактор QML. Класс ICore предоставляет доступ к различным менеджерам. В том числе, там есть EditorManager. Этот менеджер управляет редакторами и может их создавать (внутри у него есть список всех зарегистрированных фабрик). Создать редактор можно так:
mimetype передавать не обязательно, если файл имеет расширение qml. Получаем указатель на интерфейс IEditor - это и есть редактор. Через функцию IEditor::widget() получаем окно и делаем с ним все что угодно. Надеюсь помог. ![]() Если хотите дальше разрабатывать эту тему, то без ковыряния исходников никак не обойтись. |
|
|
Гость_Гость_heiheshang_*_* |
![]()
Сообщение
#12
|
Гости ![]() |
frg10
Копание в коде привело меня к такому результату
но такой код генерит исключение. Может подскажете где копать , загрузить библиотеки или еще чего установить для приложения?
Причина редактирования: не цитируй целыми сообщениями
|
|
|
frg10 |
![]()
Сообщение
#13
|
Студент ![]() Группа: Участник Сообщений: 47 Регистрация: 8.11.2009 Из: Ростов-на-Дону Пользователь №: 1213 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
А что, то что я написал не работает? Вы все плагины загрузили?
|
|
|
Гость_Гость_heiheshang_*_* |
![]()
Сообщение
#14
|
Гости ![]() |
А что, то что я написал не работает? Вы все плагины загрузили? Не работает
Делал так , скопировал из main.cpp
|
|
|
frg10 |
![]()
Сообщение
#15
|
Студент ![]() Группа: Участник Сообщений: 47 Регистрация: 8.11.2009 Из: Ростов-на-Дону Пользователь №: 1213 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Гм... У меня ваш код без последних четрех строк отлично работает с QtCreator 1.2.1. На какой строчке у вас падает?
|
|
|
Гость_Гость_heiheshang_*_* |
![]()
Сообщение
#16
|
Гости ![]() |
|
|
|
frg10 |
![]()
Сообщение
#17
|
Студент ![]() Группа: Участник Сообщений: 47 Регистрация: 8.11.2009 Из: Ростов-на-Дону Пользователь №: 1213 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Да, не получается у него стиль загрузить. Просто QtCreator запускается? Под какой системой сидите?
Попробуйте вставит вначале программы, после создания QApplication строчку:
Что выдаст? |
|
|
Гость_Гость_heiheshang_*_* |
![]()
Сообщение
#18
|
Гости ![]() |
Да, не получается у него стиль загрузить. Просто QtCreator запускается? Под какой системой сидите? Попробуйте вставит вначале программы, после создания QApplication строчку:
Что выдаст? Ни че не выдает хотя стоит QApplication::setStyle(new QWindowsStyle); |
|
|
frg10 |
![]()
Сообщение
#19
|
Студент ![]() Группа: Участник Сообщений: 47 Регистрация: 8.11.2009 Из: Ростов-на-Дону Пользователь №: 1213 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Ни че не выдает хотя стоит QApplication::setStyle(new QWindowsStyle); Тогда нужно или вообще убрать принудительную установку стиля, или сделать вот так:
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#20
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Стиль лучше устанавливать через фабрику:
и проверять указатель, т.к. стиля может не существовать на данной конкретной машине
|
|
|
frg10 |
![]()
Сообщение
#21
|
Студент ![]() Группа: Участник Сообщений: 47 Регистрация: 8.11.2009 Из: Ростов-на-Дону Пользователь №: 1213 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Litkevich Yuriy
Да, так действительно лучше. Фабрика сама вызовет setObjectName для объекта стиля. |
|
|
Гость_Гость_heiheshang_*_* |
![]()
Сообщение
#22
|
Гости ![]() |
Ни че не выдает хотя стоит QApplication::setStyle(new QWindowsStyle); Тогда нужно или вообще убрать принудительную установку стиля, или сделать вот так:
Получилось загрузить плагины, но при их загрузке вылетает окно qtcreator, а на кой оно мне, и редактор не показывается, хотя создается. |
|
|
frg10 |
![]()
Сообщение
#23
|
Студент ![]() Группа: Участник Сообщений: 47 Регистрация: 8.11.2009 Из: Ростов-на-Дону Пользователь №: 1213 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Получилось загрузить плагины, но при их загрузке вылетает окно qtcreator, а на кой оно мне А я предупреждал ![]() и редактор не показывается, хотя создается. Ну дальше ничем помочь не могу. Хотя интересно будет узнать о результатах. P.S. Может он невидимым создается? |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 22.6.2025, 12:20 |