LINUX.ORG.RU

[Qt,Windows,Creator plugins] Проблема при сборке проекта.


0

1

В QtDesigner-е помимо своих widget-ов есть возможность добавлять и рукописные. И даже есть примеры в документации, как их изготавливать. Класс, который обеспечивает регистрацию рукодельного widget-а, наследует интерфейс QDesignerCustomWidgetInterface. В этом интерфейсе есть функция includeFile, которая, как я понял, должна возвращать строку с заголовочным файлом рукодельного widget-а. В примере (Custom Widget Plugin) возвращается только имя файла, без никто:

QString AnalogClockPlugin::includeFile() const
{
 return "analogclock.h";
}
и такой вариант не работает. При попытке собрать приложение с формой, на которой лежат эти часы, конпелятор говорит, что analogclock.h не найден. Хорошо, я явно указал, откуда можно его забрать:
QString AnalogClockPlugin::includeFile() const
{
 return "<../examples/designer/customwidgetplugin/analogclock.h>";
}
Компиляция проходит успешно, но при линковке оказывается, что функции widget-а, лежащего на форме QtDesigner-а задекорированы (undefined reference to `_imp___ZN9AnalogClockC1EP7QWidget), и линковка проваливается.

Что и где я делаю неправильно, кроме того, что использую Qt?

Да, чуть не забыл: сам Qt — установщик под виндоуз, тянутый с официального сайта, версия 2010.05.

one_more_hokum ★★★
() автор топика

При попытке собрать приложение с формой, на которой лежат эти часы, конпелятор говорит, что analogclock.h не найден.

А указать в INCLUDEPATH где лежит analogclock.h не пробовал?

anonymous
()
Ответ на: комментарий от anonymous

указать в INCLUDEPATH где лежит analogclock.h

Ошибка линковки debug/main.o:path\to\my\project/./ui_clockForm.h:37: undefined reference to `_imp___ZN11AnalogClockC1EP7QWidget' осталась.

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от one_more_hokum

Еще либс наверное: LIBS += ...

Хотя вообще-то, плагины должны искаться в стандартных путях.

anonymous
()
Ответ на: комментарий от anonymous

Еще либс наверное: LIBS +=

Собирается плагин, кстати, по умолчанию как DLL. Можно сказать ему сборку в статическую библиотеку, но заставить собирать одновременно и то, и другое, мне не удалось пока.

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от one_more_hokum

Я никогда не работал с дизайнером, так что не очень в курсе. Но как я понимаю, тебе нужно собрать плагин отдельным проектом, на выходе получаешь DLL, устанавливаешь ее в нужное место, чтобы дизайнер мог ее найти. Но это только для дизайнера, в твое приложение линковать плагин не нужно.

Но хидер, который возращается в includeFile, должен быть в твоем другом проекте (приложения), так же как и реализация его, то есть в .pro файле должно быть:


TEMPLATE = app
...
HEADERS += analogclock.h
SOURCE += analogclock.cpp

Плагин всего лишь нужен для правильной генерации xml'а в .ui файле и для того, чтобы твой виджет отображался в дизайнере.

anonymous
()

если не изменяет память нужно создать модуль и кинуть его к QtDesigner в Foundations of Qt Development есть глава описывающая как это делать.

frozenix ★★★
()
Ответ на: комментарий от one_more_hokum

> _imp_

Этот префикс добавляется к символам, которые экспортируются dll-кой. Если у тебя статическая либа, они естественным образом не находятся.

unC0Rr ★★★★★
()

Оформление самописных виджетов для «закидывания» их на формы - вот, что Вы делаете не правильно.

Пишите формы в коде и будет Вам счастье.

trex6 ★★★★★
()
Ответ на: комментарий от trex6

> Оформление самописных виджетов для «закидывания» их на формы - вот, что Вы делаете не правильно

Ну, если в Designer-е предусмотрена такая возможность, отчего бы ей и не воспользоваться? Только выясняется, что это сопряжено с «некоторыми трудностями».

Пишите формы в коде

Иногда сильно проще по быстрому наговнякать форму, а потом вдумчиво прикручивать к ней логику работы. Да и usability этой формы легче настраивать мышкой. Кнопочка тут, кнопочка там...

one_more_hokum ★★★
() автор топика
Ответ на: комментарий от one_more_hokum

>Кнопочка тут, кнопочка там...
Я надеюсь, что Вы не забываете про лейауты? А то глупые люди их в последней версии креатора по умолчанию отключили.

trex6 ★★★★★
()
Ответ на: комментарий от trex6

> Вы не забываете про лейауты?

Конечно нет. Немасштабируемые окна выглядят как УГ.

one_more_hokum ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.