Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: ManOfOrange от Август 29, 2010, 20:27



Название: Создание пользовательского виджета в Qt Creator
Отправлено: ManOfOrange от Август 29, 2010, 20:27
Господа, мне требуется создать пользовательский виджет. Но с ним возникают проблемы.
Долго и тщательно я читал Бланшетт и Соммерфилд (и Шлее), документацию, перевод документации, http://wiki.metrotek.spb.ru/wiki/Учим_Qt_новым_трюкам (http://wiki.metrotek.spb.ru/wiki/Учим_Qt_новым_трюкам) - вот эту статью (на которую возлагал большие надежды). А также много тем на этом форуме, но я так и не смог решить проблему.

Итак, у меня Windows 7, стоит Qt 4.5.3 (c minGW), Qt Creator 1.2.1. Прочие проекты работают, запускаются, собираются.

В переменные среды прописано: path: C:\Qt\4.5.3\bin;C:\MinGW\bin; QT_PLUGIN_PATH: C:\Qt\qtcreator-1.2.1\bin

Файлы и порядок действий беру из вышеупомянутой статьи - сейчас хочу хоть как-нибудь сделать пользовательский виджет. Файлы лежат здесь в widget-plugin - http://www.metrotek.spb.ru/files/sources/qt-widgets-article.zip (http://www.metrotek.spb.ru/files/sources/qt-widgets-article.zip)

.pro-файл:

Код:
TARGET = widget-plugin
TEMPLATE = lib
CONFIG += designer \
    plugin
DESTDIR = $$(QT_PLUGIN_PATH)/designer
SOURCES += customspin.cpp \
    customspinplugin.cpp
HEADERS += customspin.h \
    customspinplugin.h
RESOURCES += widget-plugin.qrc
FORMS += customspin.ui
QMAKE_POST_LINK = cp \
    customspin.h \
    $(DESTDIR)

Остальные файлы не буду выкладывать, чтобы не загромождать - если есть необходимость, выложу.

При сборке в release вывод компилятора:

Creating library file: c:\Qt\qtcreator-1.2.1\bin\designer\libwidget-plugin.a
process_begin: CreateProcess((null), cp customspin.h "c:\Qt\qtcreator-1.2.1\bin\designer ", ...) failed.
make (e=2): Не удается найти указанный файл.
mingw32-make.exe[1]: *** [c:\Qt\qtcreator-1.2.1\bin\designer\widget-plugin.dll] Error 2
C:\MinGW\bin\mingw32-make.exe: *** [release] Error 2
Завершено с кодом возврата 2.
Ошибка во время сборки проекта widget-plugin
Во время выполнения сборки на этапе 'Make'

Огромная просьба, подсказать, что может быть не так. Если есть возможность (и время), выложить какой-нибудь простейший виджет с пошаговой инструкцией установки...

Заранее спасибо.

P.S. Если подскажете, как сделать нормальные ссылки буду очень благодарен


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: Пантер от Август 29, 2010, 20:35
Замени
Код:
QMAKE_POST_LINK = cp \
    customspin.h \
    $(DESTDIR)
на
Код:
QMAKE_POST_LINK = xcopy \
    customspin.h \
    $(DESTDIR)


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: ManOfOrange от Август 29, 2010, 21:17
Попробовал, как вы сказали.
Теперь всё собирается, но плагин не появляется.

В Инструментах->редактор форм->о модулях следующее:
(http://img-fotki.yandex.ru/get/4506/lenvampir.0/0_46ba5_f8ef7c7f_XL)

Означает, что мне необходим более поздний Qt Creator?


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: ManOfOrange от Август 29, 2010, 23:05
Попробовал на Qt 4.6.3, Qt Creator 1.3.1, теперь выводит это:
(http://img-fotki.yandex.ru/get/4602/lenvampir.0/0_46beb_e519776_XXL)


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: Авварон от Август 29, 2010, 23:18
тему не читал, но рискну предположить что ошибка в том, что креатор собран студией, а ваш плагин mingw. Такой вопрос регулярно возникает:)
проверьте плагин во внешнем дизайнере (он собран также mingw) - если там заработает, то всё ок, и надо просто собрать плагин студией


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: ManOfOrange от Август 29, 2010, 23:44
О! Интересно! В Designer'е действительно пользовательский спинбокс виден... Спасибо!
Пойду искать, как собирать плагин студией.

Доп вопрос: логично предположить, что можно и Creator собрать mingw?


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: Авварон от Август 29, 2010, 23:48
да, теоретически можно:)


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: ManOfOrange от Август 30, 2010, 00:09
Слово "теоретически" наводит на нехорошие мысли...

Не могли бы вы подсказать, как собрать плагин студией? Был бы премного благодарен ;-)


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: Авварон от Август 30, 2010, 01:00
ну практических попыток собрать креатор мингвой я не видел. Хотя сложностей быть не должно.
для сборки надо поставить либы студии+кумейк и прогнать *.pro файл им, а дальше nmake (ну либо в креаторе указываете нужный профиль)


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: Пантер от Август 30, 2010, 06:16
Креатор очень легко собирается MinGW'ом. qmake && make и все.


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: lit-uriy от Август 30, 2010, 06:26
>>Креатор очень легко собирается MinGW'ом.
+1, раз в неделю собираю из мастера


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: Sancho_s_rancho от Август 30, 2010, 06:51
>>Креатор очень легко собирается MinGW'ом.
+1, раз в неделю собираю из мастера
А в чем смысл собирать самому, ежели все, что не проваливается на тестах они собирают сами и кладут : ftp://ftp.qt.nokia.com/qtcreator/snapshots/  


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: lit-uriy от Август 30, 2010, 07:33
в том-то и дело, что у них почему-то периодически не собирается версия, например, под виндовоз.
А у меня всё собирается.
Может робот у них крив.


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: Sancho_s_rancho от Август 30, 2010, 10:18
в том-то и дело, что у них почему-то периодически не собирается версия, например, под виндовоз.
А у меня всё собирается.
Может робот у них крив.
Есть рассылка по qt-creator, там как раз спрашивали, почему чуть ли не месяц сборок под Windows не выкладывалось. Кутешники ответили, что выкладывается только то, что проходит их автотесты.


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: ManOfOrange от Август 30, 2010, 17:35
Пантер, lit-uriy, не могли бы вы подробнее рассказать, как собрать Qt Creator с помощью mingw? Желательно, наиболее простой вариант, но точно надёжный :-)


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: Пантер от Август 30, 2010, 17:36
qmake && make
Как еще подробнее?


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: ManOfOrange от Август 30, 2010, 19:25
Где это написать? В командной строке? В какой директории, какому .exe...

Просто, я это не понимаю


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: Пантер от Август 30, 2010, 20:11
Качаешь и распаковываешь исходники Креатора, запускаешь консоль, переходишь в распакованный каталог и делаешь qmake && make, ждешь от 30 минут до 2 часов (зависит от машины) и получаешь собранный Креатор.


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: Sancho_s_rancho от Август 30, 2010, 20:53
Качаешь и распаковываешь исходники Креатора, запускаешь консоль, переходишь в распакованный каталог и делаешь qmake && make, ждешь от 30 минут до 2 часов (зависит от машины) и получаешь собранный Креатор.
или make -j4 и ждешь минут 10. За 30 минут у меня собирается Qt 4.7 с вебкитом, фононом и декларативом.


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: Пантер от Август 30, 2010, 20:57
Везет... У меня часа 2 примерно Кьют собирается.


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: Sancho_s_rancho от Август 30, 2010, 21:24
Везет... У меня часа 2 примерно Кьют собирается.
Что-то долго. Может ЭВМ обновить?
Сейчас склонировал репозиторий qt-creator и собрал ветку master (туда уже всякий qt quick засунут) с Qt 4.7.0-rc (была собрана ранее). Сборка (ОС Линукс) со всеми плагинами заняла девять с половиной минут. А у меня бюджетная тачка, купленная более года назад: Phenom II x3 2.6 Ггц, 2 Гб DDR3 (1066 Мгц).  Мамки для AMD относительно дешевые; процессоры, с отключенным одним ядром - тоже. Плюс запас на будущее есть - всегда можно выкинуть трехядерный и воткнуть 4-6 ядерный с частотой более 3-х Ггц.


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: Пантер от Август 30, 2010, 21:33
Ну, у нас не так круто...


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: lit-uriy от Август 30, 2010, 22:29
Добавлю:
Если сборка в виндовозе, ту нужно запускать командную строку с настроенным окружением. Если Qt ставил из установщика, то обычно в кнопке "пуск" можно найти командную строку Qt.


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: ManOfOrange от Август 31, 2010, 13:59
Огромное спасибо за помощь! Поставил Qt 4.7.0-rc1, собрал с его помощью qt-creator-2.0.1-src/
Виджет (ура!) встроился в Qt Creator.
Но! При простейшей пробе - новый проект, создал форму, вытянул на неё свой виджет - проект не собирается. Если просто запустить, то выдаёт:
(http://img-fotki.yandex.ru/get/4508/lenvampir.0/0_46d81_385f67a0_XL)

Если же добавить в PRO-файл следующее (по аналогии с "Учим Qt новым трюкам):
Код:
INCLUDEPATH += $$(QT_PLUGIN_PATH)/designer
LIBS += -L$$(QT_PLUGIN_PATH)/designer \
    -lDiagramF

То выдаёт следующее:
Код:
undefined reference to 'DiagramRapid::DiagramRapid(QWidget*)'     mainwindow.cpp

In function `Z4qMinIiERKT_S2_S2_':
File not found: c:\Qt\4.7.0-rc1\lib/libqtmaind.a(qtmain_win.o)(.eh_frame+0x12)

error: undefined reference to `__gxx_personality_v0'
File not found: ../../include/QtCore/../../src/corelib/thread/qbasicatomic.h:95:

error: collect2: ld returned 1 exit status

(http://img-fotki.yandex.ru/get/4605/lenvampir.0/0_46d82_735cb5c_XL)

Как заставить виджет работать?


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: Пантер от Август 31, 2010, 15:35
А свой плугин пересобрал с Qt 4.7.0-rc1?


Название: Re: Создание пользовательского виджета в Qt Creator
Отправлено: ManOfOrange от Сентябрь 03, 2010, 21:34
Да, именно с ней