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


Автор: mosg 29.8.2008, 15:05
Добрый день!

Интересует вопрос: встречал ли кто-нибудь документацию по созданию своих виджетов с Qt по примеру wwWidgets библиотеки?

 - http://www.wysota.eu.org/wwwidgets/

Спасибо.

Автор: bsa 29.8.2008, 15:56
http://doc.trolltech.com

А что тебя конкретно интересует?

Автор: bsa 29.8.2008, 17:55
А что собственно мешает посмотреть исходники этих wwwidgets? Они доступны.
И вообще, свой виджет делается путем создания класса-наследника QWidget

Автор: mosg 29.8.2008, 21:12
Насчет doc.trolltech.com не буду ничего комментировать, ибо я эту страницу вижу каждый день, и каждый Божий день ничего близкого к тому, о чем я спрашиваю там не появляется ...

Цитата
А что собственно мешает посмотреть исходники этих wwwidgets? Они доступны.
И вообще, свой виджет делается путем создания класса-наследника QWidget


А вот это уже правильный ход мыслей, это первое чем я занялся, когда задумался о своем виджете, но исходники wwwidgets достаточно массивны, а я предпочитаю тратить время на понимание как что-то делается из простого, а не на ковыряние чужого кода ... Хотя, если честно, я там немного покавырял ...

Что мне хочется сделать? Вот это: http://www.wysota.eu.org/wwwidgets/screenshots/qwwclearlineedit.png

Автор: SABROG 29.8.2008, 22:35
Если бы я хотел сделать подобный контрол используя лишь свои текущие знания, то я бы наверно взял бы QFrame, впихнул туда QLineEdit и за ним widget, поигрался бы с настройками цвета, бордюров, размеров. Переопределил бы событие для мыша, чтобы виджет, который отображает кнопку стирания работал как кнопка.

Автор: bsa 30.8.2008, 08:49
А я бы отнаследовался от QLineEdit и переопределил paintEvent()...

Автор: SABROG 30.8.2008, 21:36
Цитата(bsa @ 30.8.2008,  08:49)
А я бы отнаследовался от QLineEdit и переопределил paintEvent()...

В принципе можно нарисовать картинку крестика в правом углу в обработчике paintEvent, а потом обрабатывать эвент мыши, и если клик был где-то в области этой картинки, то эмитить свой сигнал на очистку. А чтобы картинка не затиралась текстом, сначала вызывать оригинальный обработчик painEvent'a, а потом сверху рисовать картинку. Можно еще сделать проверку в paintEvent'e на текущую позицию мышки, чтобы менять вид картинки.

Автор: bsa 31.8.2008, 10:48
Цитата(SABROG @ 30.8.2008,  21:36)
Цитата(bsa @ 30.8.2008,  08:49)
А я бы отнаследовался от QLineEdit и переопределил paintEvent()...

В принципе можно нарисовать картинку крестика в правом углу в обработчике paintEvent, а потом обрабатывать эвент мыши, и если клик был где-то в области этой картинки, то эмитить свой сигнал на очистку. А чтобы картинка не затиралась текстом, сначала вызывать оригинальный обработчик painEvent'a, а потом сверху рисовать картинку. Можно еще сделать проверку в paintEvent'e на текущую позицию мышки, чтобы менять вид картинки.

Молодец. Весь алгоритм разложил. Что теперь топикстартеру останется сделать? smile 

Автор: mosg 31.8.2008, 17:55
Цитата(bsa @  31.8.2008,  10:48 Найти цитируемый пост)
Что теперь топикстартеру останется сделать?

Топикстартер то сделает так, вот только вопрос был не в том, как реализовать алгоритм, а вопрос был об общей методологии процесса smile Ну и на том спасибо, SABROG!

Будет реализация у меня - оставлю ссылку тут,.. поехали  smile 

Автор: mosg 1.9.2008, 11:47
Всем знающим и не знающим: 

 - это : http://www.wysota.eu.org/wwwidgets/screenshots/qwwclearlineedit.png
и частично
 - это : http://www.wysota.eu.org/wwwidgets/screenshots/qwwfilechooser.png

тут: http://www.mosg.info/stuff/src/cwidgets.rar

Автор: pilotnet 16.9.2008, 12:53
А я проще делал - наследовал  qwidget и пихал в него qlineedit либо qlabel и qpushbutton 

Автор: petroline 11.8.2013, 14:01
Я начал изучать Qt недавно. Установил Qt 5.1....
Пытаюсь создать проект "Пользовательский виджет Qt Designer" и... чёт не получается...

Запускаю мастер создания проекта, выбираю категорию "Другой проект" даллее "Пользовательский проект Qt Designer"
Указываю для проекта имя MyPushButton, добавляю класс виджета MyPushButton, в качестве базового указываю QPushButton.
В настройках оставляю по умолчанию ("Включить проект", "Создать основу").
На следующей форме оставляю так же по умолчанию: Название модуля - mypushbuttonplugin, Файл ресурсов - icon.qrc

В сгенерированные коды не вношу никаких изменений. Мне пока интерена сама технология создания и интеграции виджета в Qt Creator.
Потому сразу запускаю отладку (точнее выпуск - release).
Как я понимаю сборка проходит гладко, но, в конце появляется окошечко.

http://s2.ipicture.ru/Gallery/Viewfull/29381959.html

Какая программа требуется, я так и не понял (рыскания по инету в течение суток ничего не дали... может не там рыскал).
Возможно речь идет о какой-то утилите установки виджета или еще чего... Вобщем, в итоге... файл libmypushbuttonplugin.dylib я заполучил,
но как плагин он никуда не установился. На сколько понимаю, он должен попасть в папку Qt5.1.0/5.1.0/clang_64/plugins/designer (это в MAC OS) или Qt\Qt5.1.0\Tools\QtCreator\bin\plugins\designer (WIndows).
Копирую его в эти папки в ручную... в интерфейсе Qt в списке плагинов ничего не появилось... Иду в меню "Интрументы"-"Дизайнер форм"-"О плагинах Qt Designer", хлопаю кнопку "Обновить".
В результате под MAC OS никакой реакции, в винде получаем сообщение "Не возможно загрузить библиотеку...... процедура не найдена".

http://s1.ipicture.ru/Gallery/Viewfull/29381820.html

Qt скачана и установлена как есть (т.е. все по умолчанию) отсюда http://qt-project.org/downloads версия 5.1.
Установлена под Windows 7 (32bit) и MAC OS X Lion 10.8.4

Что под виндой, что под маком... с плагином не удалось. Что делаю не так ?

Автор: bsa 12.8.2013, 15:46
Чтобы "запустить" библиотеку, необходимо запустить программу, которая загрузит эту библиотеку. Вот у тебя Критор и интересуется, где лежит программа.
Чтобы плагин загрузился, он должен быть собран той же версией компилятора и с использованием той же версии Qt, что и критор/дизайнер.

Автор: petroline 13.8.2013, 18:25
Цитата(bsa @ 12.8.2013,  15:46)
Чтобы "запустить" библиотеку, необходимо запустить программу, которая загрузит эту библиотеку. Вот у тебя Критор и интересуется, где лежит программа.
Чтобы плагин загрузился, он должен быть собран той же версией компилятора и с использованием той же версии Qt, что и критор/дизайнер.

Хм.. было подозрение на счет запуска... Но еще были мысли, что ему нужна программа копирования этого самого виджета. По идее, виджет создан и скомпилирован, судя по скриптам в pro-файле, библиотека виджета должна быть скопирована в папку с виджетами (этого не происходит). У меня стоит всего одна версия (Qt 5.1).. а как узнать, в какой версии собран мой Qt Creator ?

Автор: Alca 13.8.2013, 20:37
https://bitbucket.org/skynowa/cdbimage/src

Автор: bsa 14.8.2013, 10:53
Цитата(petroline @  13.8.2013,  19:25 Найти цитируемый пост)
как узнать, в какой версии собран мой Qt Creator ? 

Открой пункт меню "О программе Qt Creator" в меню "Справка".

Автор: petroline 10.9.2013, 08:55
Хм... т.е., если QtCreator 2.8.0 создан на основе Qt 4.8.4, то и виджет под него надо создавать в Qt 4.8.4 ? (на кой он тогда идет в комплекте с Qt 5.1.0)...

Автор: bsa 10.9.2013, 11:55
petroline, создание плагинов - это несколько специфичная работа, поэтому мало кто ей занимается. А вот пощупать Qt 5 есть много желающих.

Автор: Aline 15.10.2013, 10:28
mosg, а как Вы интегрировали свой виджет в дизайнер? У меня почему то не получается его туда добавить:(

Автор: petroline 15.10.2013, 10:40
Цитата(Aline @ 15.10.2013,  14:28)
mosg, а как Вы интегрировали свой виджет в дизайнер? У меня почему то не получается его туда добавить:(

Как я понял, по задумке авторов, он должен сам туда интегрироваться после компиляции... В общем, я закинул эту идею на потом. Что-то там, похоже косо реализовано.
Можно в ручную, просто перекинуть полученную библиотечку в папку с плагинами. У меня не заработало.

Автор: Aline 15.10.2013, 12:21
petroline, вот и у меня не работает smile 

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