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


Автор: Aline 28.10.2013, 08:09
Доброго времени суток! У меня есть необходимость создания подобного рода графических объектов:

user posted image

Как это можно сделать? Рисовать в паинтере на сцене?

Автор: vinter 28.10.2013, 09:08
ну да, создайте общие виджеты(где сущности пересекаются) и рисуйте в paintEvent() QWdget'а. Это справедливо если не использовать QML, там немного по другому, но суть та же.

Автор: bsa 28.10.2013, 14:13
Для новых проектов рекомендуется использование QML.

Автор: Aline 28.10.2013, 14:23
bsa, QML вообще не знаю, с Qt то недавно только познакомилась.

Автор: Amp 28.10.2013, 16:44
Цитата(bsa @  28.10.2013,  14:13 Найти цитируемый пост)
Для новых проектов рекомендуется использование QML. 

Кем?

Автор: bsa 28.10.2013, 17:06
Сотрудниками Digia.
Qml рекомендуется использовать для описания интерфейсов и всей связанной с ними логики. Бизнес логику стоит писать на плюсах.

Автор: Amp 28.10.2013, 17:17
Агитируют они уже давно, а desktop components только-только затащили в Qt. Технология, по-большому счету, совершенно не обкатана, десктопных приложений пока не видно. Хотя теоретически для изображенного выше интерфейса должна бы идеально подойти.

Автор: vinter 28.10.2013, 19:07
Amp, приложения есть. На на них же не должно быть красными буквами написано: QML!
Кто на QML писал, тот на старое не вернётся. Мне удавалось на 1.1 коммерческие проекты писать, а 2.0 куда более взрослый.
Простые виджеты удобны тогда, когда в приложении не нужна анимация и интерфейс, по сути, стандартен. Когда интерфейс нарисован дизайнером QML использовать куда приятнее.

Автор: Amp 28.10.2013, 22:06
Цитата(vinter @  28.10.2013,  19:07 Найти цитируемый пост)
Простые виджеты удобны тогда, когда в приложении не нужна анимация и интерфейс, по сути, стандартен. Когда интерфейс нарисован дизайнером QML использовать куда приятнее.

О чем и речь. Большинство приложений имеют стандартный интерфейс, в свете чего рекомендация брать под их разработку qml выглядит странновато. Другой разговор - программа как у автора темы на скриншоте.

Автор: Aline 29.10.2013, 08:08
vinter, а в чём прелести QML? Можно примерчик?

Автор: vinter 29.10.2013, 09:37
QML декларативный язык. На декларативном языке проще GUI описывать. QML это ответ Qt на XAML от MS. Пример? Даже не знаю, погуглите QML examples - их полно.

Автор: Aline 29.10.2013, 09:39
vinter, То что я видела - мне не подходит. Может я не всё видела. В Qt в примерах есть использование QML, но это всё не то. Мне посоветовали QWT использовать, но пока я никак не могу получить *.dll . Там как раз куча готовых технических виджетов

Автор: vinter 29.10.2013, 09:56
Aline, я не знаю твоей задачи. Лучше слушай тех кто знает. На QML можно реализовать всё, что можно на Qt. Правда, в некоторых случаях это будет сделать сложнее чем на виджетах. Писать тебе, вот ты и выбирай.

Автор: Aline 29.10.2013, 10:19
vinter, я бы выбрала QWT, но пока даже не могу его нормально установить и подключить :(

Автор: CompWorm 5.11.2013, 04:29
http://qt-apps.org/content/show.php/QScale?content=148053 не проще?

Автор: Aline 5.11.2013, 06:50
CompWorm, нет,это не то

Автор: bsa 5.11.2013, 11:11
Aline, освой qml. один день потеряешь на него, зато потом за 5 минут долетишь сделаешь свои приборы.

Автор: Aline 5.11.2013, 11:55
bsa, мне так много всего надо освоить smile в QML тоже при помощи painter  рисовать?

Автор: Aline 5.11.2013, 13:11
bsa, читаю про QML и совершенно не понимаю как он можем помочь в моем случае. Может подскажите? Или пример приведете? Насколько я успела прочесть и понять, то там использование стандартных каких то элементов, а также изменение каких то их свойств, удобно работать с рисунками и анимацией. Но у меня то нестандартная графика, каким образом её реализовать в QML? Хоть натолкните на мысль...

Автор: Amp 5.11.2013, 13:53
Например через Canvas. Впрочем с таким же успехом можно просто в paint-event обычного виджета рисовать. 

Автор: Aline 5.11.2013, 15:36
Amp, ну вот я и не понимаю в чём прелесть QML, если всё равно рисовать "вручную"?

Автор: bsa 5.11.2013, 15:50
в том, что в случае qml ты код пишешь на JS, а в случае widgets ты пишешь на С++. А потом, возможно, тебе qml понравится, и ты 90% проекта будет на нем делать.  smile 

Автор: Amp 5.11.2013, 16:53
Aline, прелесть начинается тогда, когда все элементы у тебя уже как-то где-то написаны и доступны в qml. Ты их раскладываешься по сцене, назначаешь обработчики, биндишь свойства и смотришь как это все крутится-вертится. 

Взять те же коммерческие чарты от Digia - там почти весь код на C++/QGraphicsView к которому прилагается небольшая обвязка для QtQuick API.

Автор: CompWorm 6.11.2013, 01:13
Цитата(bsa @  5.11.2013,  15:50 Найти цитируемый пост)
в том, что в случае qml ты код пишешь на JS, а в случае widgets ты пишешь на С++. 

вот поэтому я на него плюнул. очень на любителя... к тому же не понятно как все эти свистелки потом портировать на QT6 ... и далее. переход с QT3 на QT4 был полным фиаско.
сыроват этот квик, не вселяет уверенности. к тому же если в проекте участвуют разрабы c++, то не факт что они хорошо на js шпарят. 

прошу прощения за троллинг.

Автор: vinter 6.11.2013, 06:35
JS опасен в QML smile Точнее опасно его "переиспользование". В этом плане XAML выглядит более строго, т.е. разграничение между GUI и логикой явное. QML позволяет внедрять логику в описание, что и хорошо и плохо. И, как я чаще вижу, это становится плохо. JS в QML нужно ограничивать, на мой взгляд. Портировать QML на Qt6 будет явно проще чем виджеты, ведь именно QML является основным средством разработки GUI со времён старта Qt5. 

Автор: Aline 6.11.2013, 08:31
bsa, JS я не знаю, конечно в нём не проблема разобраться, там не так сложно, но блин разбираться еще с одним языком - для меня это несколько перебор. У меня и так мозг уже работает наперекосяк: параллельно рабираюсь с Qt, с его дополнениями и тут же правлю старые проекты в C++ Builder smile

Добавлено через 2 минуты и 29 секунд
Amp, ну вот в Qwt есть уже элементы, которые как то где то описаны smile

Автор: bsa 6.11.2013, 10:58
Цитата(Aline @  6.11.2013,  09:31 Найти цитируемый пост)
bsa, JS я не знаю, конечно в нём не проблема разобраться, там не так сложно
синтаксис тот же, что и у С++. Отличия только в некоторых деталях, которые без проблем гуглятся.

Автор: bsa 6.11.2013, 11:19
vinter, "все есть яд, все есть лекарство". Естественно, что QML создан исключительно для создания интерфейсов и их логики (логики интерфейсов, а не основной логики программы). Поэтому, если кто-то пихает часть или всю бизнес логику туда, то он сам себе злобный буратина.

Автор: Amp 6.11.2013, 11:22
Цитата(Aline @  6.11.2013,  08:31 Найти цитируемый пост)
Amp, ну вот в Qwt есть уже элементы, которые как то где то описаны smile 

Дело за малым - написать биндинг и протащить классы в qml smile

Я раньше думал, что QtQuick выльется в более навороченный аналог QGraphicsView с декларативной оберткой на JS в который можно добавлять помимо шейпов уже существующие контролы, делать эффекты в пару строк, связывать свойства и т.п. Плюс C++ API для доступа к сцене. Ну то есть я ожидал аналог WPF/JavaFX, а получилось все по-другому. У нас есть OpenGL сценграф с прикрученным сбоку JS-движком, который, грубо говоря, гоняет по экрану полигоны с текстурами (не просто так конечно, а с оптимизациями, батчингом, текстурным атласами) и за рендеринг более высокоуровневых примитивов почти не отвечает, отдавая это на откуп пользователю. А его плюсовый API местами весьма низкоуровневый.

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