Плагины Qt Не работают
Вопрос
Я создал пользовательский плагин для виджетов.Плагин прекрасно интегрируется с Qt Creator, но когда я компилирую программу, я получаю эту ошибку:
"тест.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)
Решение
После обширных исследований я наткнулся на эту тему:
Оказывается, что когда вы компилируете плагин, "dll", которую вы получаете, предназначена только для целей интеграции Qt Creator / Qt Designer.Вы НЕ МОЖЕТЕ ссылаться на эту библиотеку.Вам следует предоставить другую библиотеку, содержащую заголовки и исходный код, или включить их в свой проект.Итак, подводя итог, вот правильные шаги по развертыванию пользовательского виджета:
- Создайте библиотеку, содержащую исходные тексты и заголовки пользовательского виджета.Давайте назовем эту библиотеку A.В качестве альтернативы добавьте исходные тексты и заголовки в свой проект.
- Создайте плагин виджета для интеграции Qt Creator / Designer.Опять же, этот плагин НЕЛЬЗЯ использовать ни для чего, кроме интеграции Qt Creator / Designer.
В вашем проекте вы должны добавить следующие строки в файл *.pro:
БИБЛИОТЕКИ += C:\[ПУТЬ К БИБЛИОТЕКЕ - ДВОИЧНЫЙ ФАЙЛ]
INCLUDEPATH += C:\[ПУТЬ К ЗАГОЛОВКАМ БИБЛИОТЕКИ A]
Еще раз обратите внимание, что вы ссылаетесь на библиотеку A, а НЕ на библиотеку, которую вы получаете при компиляции плагина widget.
Другие советы
Если вы видите свой виджет в конструкторе, значит, ваш плагин работает так, как вы его указали.Ваша проблема в основном заключается в том, что программа, которую вы компилируете, не может найти файл заголовка для виджета, который вы добавляете с помощью плагина.Ответ, скорее всего, один из двух:
- Добавьте больше пути к заголовку в вашем плагине, чтобы программы, использующие виджет, могли найти заголовок соответствующим образом.
- Добавьте путь к заголовочному файлу в качестве пути включения в ваш компилятор, чтобы компилятор мог найти соответствующий заголовок, когда файлы программы ссылаются на него.
Я столкнулся с такой же проблемой.Затем я попытался добавить все заголовочные файлы и .cpp-файлы плагина DLL в файл проекта applications explicitly.it исправлена проблема.