Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Ingori от Апрель 10, 2017, 07:57



Название: Не компилируется проект после добавления пользовательского плагина виджетов
Отправлено: Ingori от Апрель 10, 2017, 07:57
Здравствуйте. Не могу подключить к проекту плагин виджетов.
Последовательность действий следующая:

Создаю новый проект, выбираю шаблон: "Пользовательский виджет Qt Designer", указываю компилятор: "Desktop Qt 5.8.0 MSVC2015 32bit", создаю 3 класса виджетов: Widget1, Widget2, Widget3. Все остальные настройки при создании нового проекта оставляю как есть.
Затем собираю проект и копирую образовавшийся dll файл (наз. mycollectionplugin.dll) в Qt\Qt5.8.0_msvc\Tools\QtCreator\bin\plugins\designer, для отображения новых виджетов.
Далее вновь создаю новый проект, "Приложение Qt Widgets". В файле проекта *.pro прописываю путь к lib файлу плагина и к заголовочным файлам.
Если попытаться использовать новые виджеты, то при сборке получаю следующие ошибки:

        LNK2019: unresolved external symbol "public: __thiscall Widget1::Widget1(class QWidget *)" (??0Widget1@@QAE@PAVQWidget@@@Z) referenced in function "public: void __thiscall Ui_MainWindow::setupUi(class QMainWindow *)" (?setupUi@Ui_MainWindow@@QAEXPAVQMainWindow@@@Z)

        LNK1120: 1 unresolved externals

Кстати эти же ошибки возникают если lib файл в принципе не подключать.
(При компиляции проекта mingw lib файл вообще не появляется.)

Pro файл плагина виджетов
Цитировать
CONFIG      += plugin debug_and_release
TARGET      = $$qtLibraryTarget(mycollectionplugin)
TEMPLATE    = lib

HEADERS     = widget1plugin.h widget2plugin.h widget3plugin.h mycollection.h
SOURCES     = widget1plugin.cpp widget2plugin.cpp widget3plugin.cpp mycollection.cpp
RESOURCES   = icons.qrc
LIBS        += -L.

greaterThan(QT_MAJOR_VERSION, 4) {
    QT += designer
} else {
    CONFIG += designer
}

target.path = $$[QT_INSTALL_PLUGINS]/designer
INSTALLS    += target

include(widget2.pri)
include(widget1.pri)
include(widget3.pri)


Сориентируйте пожалуйста в чем ошибка?


Название: Re: Не компилируется проект после добавления пользовательского плагина виджетов
Отправлено: ssoft от Апрель 10, 2017, 16:49
Либо нет реализации Widget1::Widget1(class QWidget *), либо класс не экспортирован __declspec(dllexport)

Можно прикрутить что-то подобное

Код
C++ (Qt)
#include <QtCore/QtGlobal>
 
#if defined MY_LIB_EXPORT
#    define MY_EXPORT Q_DECL_EXPORT
#elif defined MY_LIB_IMPORT
#    define MY_EXPORT Q_DECL_IMPORT
#else
#    define MY_EXPORT
#endif
 
class MY_EXPORT Widget1
...
 

В файле проекта плагина добавить

Код:
...
DEFINES *= MY_LIB_EXPORT
...


Название: Re: Не компилируется проект после добавления пользовательского плагина виджетов
Отправлено: Ingori от Апрель 10, 2017, 19:01
Реализация конструктора Widget1::Widget1(class QWidget *) есть, а вот вариант с экспортированием проверю.