Russian Qt Forum

Qt => Общие вопросы => Тема начата: GqRun от Ноябрь 15, 2006, 13:57



Название: Регистрация плагина в системе
Отправлено: 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 от Ноябрь 15, 2006, 16:12
Никаких проблем с написание и использованием плагинов.
Необходимо различать плагин для дизайнера и файлы реализующие функциональность плагина.

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





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

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



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

Не является странным имя файла хедера - прописными буквами. Надо же как то избегать граблей. Windows MSVC все сожрет, а в Linux регистр символов в имени файла значащий.


Название: Регистрация плагина в системе
Отправлено: burkav84 от Ноябрь 15, 2006, 19:48
Цитата: "Mikhail"

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


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


Название: Регистрация плагина в системе
Отправлено: Mikhail от Ноябрь 15, 2006, 20:01
А зачем бы это нужно было. Никаких здравых мыслей в голову не приходит.
Плагин дизайнера необходим только при редактировании формы. Редактирование происходит в дизайнере. Значит на машине есть Qt, а соответственно и путь $QTDIR/plugins/designer. Не надо усложнять.


Название: Регистрация плагина в системе
Отправлено: GqRun от Ноябрь 16, 2006, 01:24
OK, допустим я разрабатываю плагин как конечный продукт.
Он должен быть доступен в дизайнере и должна быть возможность скомпилировать проекты, использующие его.

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


Название: Регистрация плагина в системе
Отправлено: Mikhail от Ноябрь 16, 2006, 08:34
А читать изложенное мной выше все равно не хочется?
Кроме хедеров нужны и библиотеки (либо исходники ).
А уж куда ставить- хозяин барин. ТОлько необходимо дать рекомендации по указанию путей.


Название: Регистрация плагина в системе
Отправлено: GqRun от Ноябрь 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 от Ноябрь 16, 2006, 12:45
Надо посмотреть файл проекта.
qmake не забыл выполнить после изменения проекта?
Выкладывай

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

 QTPLUGIN += QFSViewer
на мой взгля лишнее


Название: Регистрация плагина в системе
Отправлено: GqRun от Ноябрь 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 от Ноябрь 16, 2006, 17:29
На здоровье.
Еще при выполнении make install хорошо бы положить библиотеку qfsviewer.lib куда-нибудь. Например, $(QTDIR)/lib.  А хедеры в $(QTDIR)/include или $(QTDIR)/include/qfsviewer.