Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Custom widgets


Автор: Annihilator 5.3.2010, 14:02
Кинул на форму в дизайнере CustomWidgetPlugin, добавил заголовок "analogclock.h", прописал зависимости $(QTDIR)\plugins\designer\customwidgetplugin.lib. Все работает, комплируется, линкуется. Часы на форме видны.
Решил использовать таким же образом IconEditor из книги Бланшет (QT4 2-е издание). Скомпилил плагин, получил dll/lib/exp. Закинул их туда же где и customwidgetplugin  ($(QTDIR)\plugins\designer).
Затем в главном проекте также кинул на форму, добавил заголовок, зависимости - все точно так же, но ошибка вылазит
Цитата

1>mainwindow.obj : error LNK2019: unresolved external symbol "public: __thiscall IconEditor::IconEditor(class QWidget *)" (??0IconEditor@@QAE@PAVQWidget@@@Z) referenced in function "public: void __thiscall Ui_MainWindow::setupUi(class QMainWindow *)" (?setupUi@Ui_MainWindow@@QAEXPAVQMainWindow@@@Z)
1>release\UsingIconEditor.exe : fatal error LNK1120: 1 unresolved externals


Уже на 100 раз все проверял. Где я туплю, подскажите. Идущие с SDK виджеты линкуются к проекту без проблем, сторонние - ни в какую.  smile 

(QT 4.6, VS2008 SP1)

Автор: Annihilator 5.3.2010, 22:44
Проблему решил следующим способом:
Немного подправил *.pro file, чтоб в итоге он выглядел так

Код

CONFIG       += designer plugin debug_and_release
TARGET      = $$qtLibraryTarget($$TARGET)
TEMPLATE      = lib
QT += svg
QTDIR_build:DESTDIR     = $$QT_BUILD_TREE/plugins/designer

HEADERS       = iconeditor.h \
                iconeditorplugin.h
SOURCES       = iconeditor.cpp \
                iconeditorplugin.cpp
RESOURCES     = iconeditorplugin.qrc

# install
target.path = $$[QT_INSTALL_PLUGINS]/designer
sources.files = $$SOURCES $$HEADERS *.pro
sources.path = $$[QT_INSTALL_EXAMPLES]/designer/iconeditorplugin
INSTALLS += target sources


и чтобы избавиться от сообщений типа
Цитата

"warning C4273: 'staticMetaObject' : inconsistent dll linkage"

в заголовке iconeditor.h пишем макрос перед именем класса

Код

#include <QtDesigner/QDesignerExportWidget>
class QDESIGNER_WIDGET_EXPORT IconEditor : public QWidget
{
......


уффф...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)