2010-03-21 3 views
3

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

«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

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

http://www.archivum.info/[email protected]/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: \ [путь к библиотечным HEADERS]

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

1

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

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

Извините, не могли бы вы объяснить это примерами кода? Я не уверен, о чем вы говорите. – Austin

+0

Ничего, я понял это. – Austin

0

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