10.09.2019
84

По случаю выхода Qt5 Beta2, хочу ею овладеть. Причем, овладеть по-взрослому, по-мужски! Ну то есть вот в RawDigger я утомился рисовать собственно GUI на C, очень хочу делать это декларативно, в грубой форме, на Javascript-е. Особенно это касается всяких форм с большим количеством элементов, но и всего остального гуя - тоже. Проблема только в том, что я совершенно не представляю себе, как это сделать. Ну то есть этот язык у меня в состоянии 'читаю, что-то понимаю, сам написать не могу'.

При этом, понятно, одним QML+JS у меня никак не обойдется, какие-то core-вещи всяко на C, а дальше как-то с ними интегрироваться. Вопрос: а есть ли какие-то систематические источники информации. В свое время пара книжек по Qt4 мне очень помогли. Я их не читал, но пролистал и многое - осознал. Хочу такого же, но для Qt5+QML2. Или не такого же, другого.

Кроме модулей, в состав инструментария входят инструменты разработки, исходные тексты Qt, примеры программ и документация. 11.2 Лицензирование Qt. Qt распространяется по условиям трёх различных лицензий: GNU GPL v3, GNU LGPL v3 и по коммерческой лицензии компании Digia.

Каких-то писучих блоггеров, которые про Qt5 пишут, может быть какие-то живые проекты, не знаю. QGraphicsView оставили но обещали убрать как можно быстрее. Вместо QGraphicsView QML2 и scenegraph c opengl backend. QML рендерится QQuickView.

Это гораздо ближе к железу, вернее к OpenGLES чем было раньше, можно шейдеры прям в QML писать. QML элементы примитивные: Rect, Text, TextInput и все такое. То есть если хочеться, что бы выглядело как в маке или windows надо все слепить из прямоугольников, текста и изоленты. Мы делали компоненты для N9, соответственно другие парни делают то же самое для desktop (мне кажется эти парни Йенс и Алан слепили уже не одну дюжину разных UI framework и компонент). Ну вот скажем банальный показ битмепа в QGraphicsView - может весь стек не нужен, а надо прямо OpenGL-ем все разукрашивать? Это делается на qml конечно просто (впрочем на С тоже не очень сложно). Можно создать QQuickView передать ему исходничек с qml и все заработает.

В qml есть pannable viewport со всякими bounce и overshoot эффектами. QML объекты это QObject то есть легко можно вызываеть одни другими и наоборот.

Кстати софтварного рендерера нет, если нет драйверов opengl то не повезло. На мой взгляд qml имеет смысл когда много анимации, опять же таки, javascript на котором некоторые вещи пишутся быстрее, но исходник сложной странички будет выглядить так же коряво как и в С.

Qt Примеры

(при условии что появятся нормальные desktop components). Хотя вот что то похожее на Metro Style UI можно лабать и без них. Вот тут есть введение Кстати доки вполне себе нормальные. Есть примеры, с описанием. Да, доки нормальные, в том смысле что понятные. Но общая картина остается какой-то мутной.

Я даже не знаю что спросить конкретно - потому что не знаю половины ответа. Впрочем, спрошу.

Если оставаться в рамках (понятного мне) C, а не QML, то что использовать вместо QGraphicsView/QGraphicsScene? У меня, грубо говоря, есть background (довольно большой, 10-20-80 мегапикселей), по которому нужен zoom и pan, а поверх него всякие объекты с поведением (подрагать мышкой, контекстные меню и т.п.). Background я бы рисовал OpenGL-ем, правда эксперименты с этим с Qt4 были какими-то странными, но я готов еще раз повторить. А по нему - уже объекты. Сейчас эти объекты - это QGraphicRectItem или что-то подобное с перехваченными евентами. У меня, грубо говоря, есть background (довольно большой, 10-20-80 мегапикселей) Вариантов несколько.

Можно сделать свой контрол на основе QGLWidget, а можно и QML. Пожалуй для этого в QML все есть.

Я сходу не нашел QWidget который мог бы показать результать рендеринга QQuickView. Раньше был qgraphicsview и его легко можно было показать как widget. Но QQuickView возвращает QOpenGLFramebufferObject который можно потом отрендерить в том же QGLWidget. Из QQuickView можно вытянуть engine а в него засунуть исходничек с qml. Евенты из QGLWidget нужно будет рутить в QQuickView.

Впрочем это навскидку и возможно есть попроще способ сделать из QQuickView widget. Элементы qml это qobject. Cпец компилятор транслирует их в qobject и добавляет разные properties. Так что скорее всего собственный велосипед в скорости не будет отличатся от QtQuick. Нужно глянуть насколько сложные те самые дополнительные объекты и имеет ли смысл добавлять qml из них. Для простого вьювера мне кажется овчинка выделки не стоит.

Хотя qml позволяет иметь скорость почти прямого использования opengl без использования его api напрямую. Я когда то пару слайдов делал по QML2 могу заслать куда нибудь. Только keynote нужен. Ну а зачем мне ручками? Я видимо не правильно вас понял. Я думал qgraphicsview чем то не устраивает, и хотелось бы что нибудь другое.

Значит QGlWidget не вариант. Я не понимаю зачем что то менять если qgraphicsview работает. Его наверняка порежут, но это случится не завтра.

Про 'как можно быстрее' мне говорили девелоперы, но от них не всегда зависят. Другой девелопер говорил что на qgraphicsview вообще много написано и даже не смотря на то что это какашка, менять они его не могут.

В QML нет itemов которые бы можно было дергать мышкой и получить context menu event. Там есть Rectangle и MouseArea, и соединить их надо ручками. И контекст меню рисовать руками. Ну или взять qml desktop components. Если оно там есть. Создавать и удалять объекты легко. Я так понимаю, что 'обещали убрать', но никакой замены.пока.

нет? Те же возможности, но с другим API Замена это QtQuick и QML. Но функционал не 1:1 конечно.

Инструкция Пол. Как залить наливной пол своими руками видео, чем отличается от стяжки полов - Duration: 3:37. Ремонт квартир. Инструкция как залить пол. Jan 6, 2015 - Узнай, Как выполнить заливку пола своими руками. Тонкости и нюансы работ, правила, пошаговая инструкция, фото + видео. Если необходимо залить бетонный пол по грунту, на подготовительном этапе производится «нулевая» разметка чистового пола (отмечается уровень,. Jul 18, 2017 - Рассказываем подробно о технологии процесса заливки самонивелирующихся смесей.

Меня уже попросвещали и я исходники поглядел (просто в имена файлов). Я верно понимаю, что если я хочу без QML, просто на С, по старинке, то никакого scenegraph мне не дают и надо пользоваться все тем же QGraphicsView, хотя это несовременно и все такое. Fallback на винде без OpenGL2 - это ANGLE (реализация OpenGL ES поверх DX9), насколько я понял. Но мне без OpenGL2 (не ES) неинтересно - я такие старые машины просто поддерживать не хочу (пока и в тестовом проекте).

И борюсь с искушением хотеть еще и float-текстур. то никакого scenegraph мне не дают Почему же. Подключить модуль quick, создать QWindow и вперёд. Проблема в том, что все UI компоненты сделаны в QML. На це - только основные айтемы для отрисовки. В QGraphicsView там хоть был QGraphicsProxyWidget - всегда можно было взять какой нибудь старый QWidget, который бы работал слегка медленнее, но без каких либо изменений.

В сценеграфе ничего такого нет. На уровне QML обещают совместимость с 1м квиком, а в сценеграфе - всё заново писать. Есть, правда, QQuickPaintedItem, которые позволяет использовать QPainter для рисования, но: 1. Оно не предназначено для частых апдейтов. Оно не работает с отдельным тредом для отрисовки (во всяком случае - не работало пол года назад).

Qt Примеры

Но QWidget и QGraphicsView никуда не делись. Fallback на винде без OpenGL2 - это ANGLE (реализация OpenGL ES поверх DX9), насколько я понял. Оно изначально было для DX. Сейчас вроде хотят сделать ещё и для других платформ. Я правда не понял нахрена, т.к. Есть уже mesa и llvm.

И борюсь с искушением хотеть еще и float-текстур. Да вроде FP textures даже в ES версии много где есть.

Проблема, что придется всё равно писать фолбэк если нет OEStexturefloat. Подключить модуль quick, создать QWindow и вперёд. И чего вперед? Вот хочу нарисовать квадратик, который можно возить мышкой и с контекстным меню по правой кнопке мыши и еще чем-нибудь хорошим. Вот банально контекстное меню? Это все было в QGraphics. Руками как-то западло все это программировать самому Понимаю, оно несовременно и на экране телефона смотрется не будет, но мне не на телефон а на десктоп с 30' монитором и мышкой.

Но QWidget и QGraphicsView никуда не делись. Ну какбы мне пишут. Я так понимаю, что 'обещали убрать', но никакой замены.пока. нет?

Те же возможности, но с другим API. Руками как-то западло все это программировать самому В це насколько я знаю - только ручками. Для QML есть компоненты, но я давно не смотрел. Для специфических айтемов нужно делать qml plugin, а потом использовать его в qml.

Qt Примеры Интерфейса

Но QWidget и QGraphicsView никуда не делись. Ну какбы мне пишут QGraphicsView оставили но обещали убрать как можно быстрее.

Я так понимаю, что 'обещали убрать', но никакой замены.пока. нет? Те же возможности, но с другим API Ну, если Дубик пишет, то его нужно и спрашивать;) Он там рядом с кьютописателями;).