Russian Qt Forum
Сентябрь 30, 2024, 10:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Регистрация плагина в системе  (Прочитано 7115 раз)
GqRun
Гость
« : Ноябрь 15, 2006, 13:57 »

Я написал плагин-виджет.
Если кинуть *so в /usr/lib/qt4/plugins/designer/, то он станет доступен в Designer и будет адекватно себя вести в предпросмотре формы (Ctrl+R).

Но при компиляции проекта, использующего его, естественно возникнут ошибки (отсутствия хедера).

Если кинуть все хедеры плагина в /usr/include/qt4/QtDesigner, то проект будет компилироваться до ошибки:

Код:
first_f.o: In function `Ui_MainWindow::setupUi(QMainWindow*)':
first_f.cpp:(.text._ZN13Ui_MainWindow7setupUiEP11QMainWindow[Ui_MainWindow::setupUi(QMainWindow*)]+0x328): undefined reference to `QFSViewer::QFSViewer(QWidget*)'
collect2: ld returned 1 exit status
make: *** [qviewer] Ошибка 1



Потом я где-то прочитал что нужно внести следующие изминения в *.pro и main.cpp:

В main.cpp добавить:

Код:
#include <QtPlugin>
Q_IMPORT_PLUGIN(PluginName)



В ProjectName.pro:

Код:
QTPLUGIN += PluginName



Если внести эти изминения, то компиляция уже будет обрываться на этом:

Код:
/usr/bin/ld: cannot find -lqfsviewer
collect2: ld returned 1 exit status
make: *** [qviewer] Ошибка 1


Вопрос: как правильно устанавливать (регистрировать) плагины в систему (что куда копировать) и как использовать их в проектах.

Если кому интересно, вот плагин: http://www.webfile.ru/1191573
Виджет для браузинга файловой системы.

PS Странный момент: uic генерирует код формы требующий хедер моего плагина с именем qfsviewer, хотя хедер и сам класс называется QFSViewer.

добавлено спустя 17 часов:

 Неужели никто из присутствующих никогда не писал плагинов для дизайнера?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Ноябрь 15, 2006, 16:12 »

Никаких проблем с написание и использованием плагинов.
Необходимо различать плагин для дизайнера и файлы реализующие функциональность плагина.

undefined reference to `QFSViewer::QFSViewer(QWidget*)'
скорее всего отсутствует или не в пути реализация плагина





Место плагина в каталоге плагинов дизайнера и лучше не искать другого.
При компиляции проекта использующего плагин необходимы -файлы, которые ты размещаешь в любом месте, но указываешь в проекте INCLUDEPATH для них. Функциональность плагина - в библиотеке. На нее также укажи путь и подключи в проекте через LIBS +=.

/usr/bin/ld: cannot find -lqfsviewer
означает, что у тебя либо нет этой библиотеки , либо она по другому пути



А вообще почитай ассистента и посмотри реализацию плагинов в примерах QT.

Не является странным имя файла хедера - прописными буквами. Надо же как то избегать граблей. Windows MSVC все сожрет, а в Linux регистр символов в имени файла значащий.
Записан
burkav84
Гость
« Ответ #2 : Ноябрь 15, 2006, 19:48 »

Цитата: "Mikhail"

Место плагина в каталоге плагинов дизайнера и лучше не искать другого.


А не знаешь как подгужать эти плагины не из $QTDIR/plugins/designer, а например application_directory/plugins ?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #3 : Ноябрь 15, 2006, 20:01 »

А зачем бы это нужно было. Никаких здравых мыслей в голову не приходит.
Плагин дизайнера необходим только при редактировании формы. Редактирование происходит в дизайнере. Значит на машине есть Qt, а соответственно и путь $QTDIR/plugins/designer. Не надо усложнять.
Записан
GqRun
Гость
« Ответ #4 : Ноябрь 16, 2006, 01:24 »

OK, допустим я разрабатываю плагин как конечный продукт.
Он должен быть доступен в дизайнере и должна быть возможность скомпилировать проекты, использующие его.

Какие файлы должны быть "установлены в систему" кроме *.so?
Только хедеры? Куда их лучше положить в линуксе?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #5 : Ноябрь 16, 2006, 08:34 »

А читать изложенное мной выше все равно не хочется?
Кроме хедеров нужны и библиотеки (либо исходники ).
А уж куда ставить- хозяин барин. ТОлько необходимо дать рекомендации по указанию путей.
Записан
GqRun
Гость
« Ответ #6 : Ноябрь 16, 2006, 12:21 »

- Я скопировал libQFSViewer.so в /usr/lib/qt4/plugins/designer/.
 - В файле проекта использующего плагин добавил:
      - INCLUDEPATH с абсолютным путем к папке со всеми исходниками.
      - LIBS с абсолютным/относительным (на результат не влияло) путем к библиотеке (*.so)
      - QTPLUGIN += QFSViewer

Но при компиляции все равно получаю ошибку:
Код:
/usr/bin/ld: cannot find -lqfsviewer


Я просто не понимаю что еще я мог забыть. Вроде бы все есть: и библиотека (so) и исходники...

А про пути я спросил, именно рекомендации. То что можно засунуть куда угодно это понятно. Просто если каждый будет так делать выйдет помойка.

В assistant подробно рассмотрено создание плагина, но совершенно не освящено его использование в проектах...

В любом случае спасибо за помощь.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #7 : Ноябрь 16, 2006, 12:45 »

Надо посмотреть файл проекта.
qmake не забыл выполнить после изменения проекта?
Выкладывай

добавлено спустя 1 минуту:

 QTPLUGIN += QFSViewer
на мой взгля лишнее
Записан
GqRun
Гость
« Ответ #8 : Ноябрь 16, 2006, 13:00 »

http://www.webfile.ru/1194155 - пароль: qviewer-alpha1.rar
http://www.webfile.ru/1194158 - пароль: qfsviewer-alpha2.rar

Е-е-е-е!!! Сработало!

Если закомментировать QTPLUGIN += QFSViewer, то будет ошибка. Как оказалось это из-за того что в main.cpp я добавил:

Код:
Q_IMPORT_PLUGIN(QFSViewer)


Вот это и было лишним.

Спасибо огромное за помощь.

Как оказалось, действительно, кроме либы и сырцов ничего не нужно. Косяк был в исходниках самого проекта.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #9 : Ноябрь 16, 2006, 17:29 »

На здоровье.
Еще при выполнении make install хорошо бы положить библиотеку qfsviewer.lib куда-нибудь. Например, $(QTDIR)/lib.  А хедеры в $(QTDIR)/include или $(QTDIR)/include/qfsviewer.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 3.066 секунд. Запросов: 23.