Вопрос

Я создал пользовательский плагин для виджетов.Плагин прекрасно интегрируется с 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)
Это было полезно?

Решение

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

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. Создайте библиотеку, содержащую исходные тексты и заголовки пользовательского виджета.Давайте назовем эту библиотеку A.В качестве альтернативы добавьте исходные тексты и заголовки в свой проект.
  2. Создайте плагин виджета для интеграции Qt Creator / Designer.Опять же, этот плагин НЕЛЬЗЯ использовать ни для чего, кроме интеграции Qt Creator / Designer.
  3. В вашем проекте вы должны добавить следующие строки в файл *.pro:

    БИБЛИОТЕКИ += C:\[ПУТЬ К БИБЛИОТЕКЕ - ДВОИЧНЫЙ ФАЙЛ]
    INCLUDEPATH += C:\[ПУТЬ К ЗАГОЛОВКАМ БИБЛИОТЕКИ A]

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top