Плагины Qt не работают - PullRequest
       31

Плагины Qt не работают

3 голосов
/ 21 марта 2010

Я создал собственный плагин виджетов. Плагин прекрасно интегрируется с Qt Creator, но когда я компилирую программу, я получаю эту ошибку:

"test.h: нет такого файла или каталога"

Где test.h - имя пользовательского виджета. Что я делаю неправильно? Это * .pro файл приложения:

TEMPLATE = app
SOURCES += main.cpp \
    mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui

Это * .pro файл плагина:

CONFIG      += designer plugin debug_and_release
TARGET      = $$qtLibraryTarget(testplugin)
TEMPLATE    = lib
HEADERS     = testplugin.h
SOURCES     = testplugin.cpp
RESOURCES   = icons.qrc
target.path = $$[QT_INSTALL_PLUGINS]/designer
INSTALLS    += target
include(test.pri)

Ответы [ 3 ]

5 голосов
/ 22 марта 2010

После обширных исследований я наткнулся на эту тему:

http://www.archivum.info/qt-interest@trolltech.com/2010-02/01398/Re-%28Qt-interest%29-Undefined-reference-to-%28any-custom-widget%29.html

Оказывается, что когда вы компилируете плагин, "dll", который вы получаете, предназначен только для целей интеграции с Qt Creator / Qt Designer. Вы НЕ МОЖЕТЕ связываться с этой библиотекой. Вы должны предоставить другую библиотеку, которая содержит заголовки и исходный код, или включить их в ваш проект. Итак, подведем итог, вот правильные шаги для развертывания пользовательского виджета:

  1. Создать библиотеку, содержащую источники и заголовки пользовательского виджета. Давайте назовем эту библиотеку А. В качестве альтернативы добавьте источники и заголовки в ваш проект.
  2. Создание плагина виджета для интеграции с Qt Creator / Designer. Опять же, этот плагин НЕ может использоваться ни для чего, кроме интеграции с Qt Creator / Designer.
  3. В вашем проекте вы должны добавить следующие строки в файл * .pro:

    LIBS + = C: \ [ПУТЬ К БИБЛИОТЕКЕ БИБЛИОТЕКИ]
    INCLUDEPATH + = C: \ [ПУТЬ К БИБЛИОТЕКЕ ЗАГОЛОВОК]

Еще раз обратите внимание, что вы ссылаетесь на библиотеку A, а НЕ на библиотеку, которую вы получаете при компиляции плагина виджета.

1 голос
/ 21 марта 2010

Если вы видите свой виджет в дизайнере, ваш плагин работает так, как вы его указали. Ваша проблема в основном в том, что компилируемая программа не может найти файл заголовка для виджета, который вы добавляете через плагин. Ответ, вероятно, одна из двух вещей:

  • Добавьте дополнительный путь к заголовку в вашем плагине, чтобы программы, использующие виджет, могли соответствующим образом найти заголовок.
  • Добавьте путь к файлу заголовка как путь включения к вашему компилятору, чтобы компилятор мог найти соответствующий заголовок, когда файлы программы ссылаются на него.
0 голосов
/ 03 сентября 2015

Я столкнулся с той же проблемой. Затем я попытался явно добавить все заголовочные файлы и .cpp файлы плагина DLL в файл проекта приложения. Это решило проблему.

...