Russian Qt Forum
Ноябрь 23, 2024, 17:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не компилируется проект после добавления пользовательского плагина виджетов  (Прочитано 2011 раз)
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)


Сориентируйте пожалуйста в чем ошибка?
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #1 : Апрель 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
...
Записан
Ingori
Гость
« Ответ #2 : Апрель 10, 2017, 19:01 »

Реализация конструктора Widget1::Widget1(class QWidget *) есть, а вот вариант с экспортированием проверю.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.212 секунд. Запросов: 22.