![]() |
Qt QML : декларативный интерфейс, императивная логика
при разработке интерфейсов мы очень часто сталкиваемся с огромным количеством рутины, обычно нужно работать со сложным конечным автоматом, кучей асинхронных анимаций и отзывчивостью к юзеру императивный путь работы с интерфейсом тернист, а звёзд редко кто достигает, а если и достигает то следующий раз опять все тернии надо проходить (редко какой интерфейсный проект проще поддерживать чем переписать заново), а вот декларативный способ задания интерфейса всё меняет местами, мы задаем только то что хотим получить, всё остальное на себя берет декларативный движок добавим к этому всему что Qt имеет систему сигналов-слотов и свой препроцессор (в общем-то свою билд-систему, и свой IDE :-) ), и что же мы получим ? мы получим QML, декларативный язык задания интерфейса со сквозным двухсторонним биндингом с C++ кодом ! другими словами мы теперь пишем интерфейс на языке подобном html и он работает напрямую с нашей C++ логикой (слава чистому MVC, слава) перейдем к примеру : обычный класс на Qt : Код:
class Stopwatch : public QObject что мы пишем в qml : Код:
import Qt 4.7 сам QML очень гибкий и базируется на JavaScript, что гарантирует некую лёгкость и гибкость изложения кода, любой валидный JavaScript код можно использовать как значение для параметров объектов, сам QML имеет встроенные средства для задания стейтов (кнопка имеет нажатый и не нажатый стейт к примеру), можно задавать любые параметры в стейтах, и имеет средства анимации между стейтами :wild: так же имеются встроенные средства для анимации параметров к примеру : Код:
Rectangle { Qt 4.7 доступен на огромнейшем количестве разнообразных платформ, написал один раз и оно работает на симбиане, meego, windows, linux, mac и тд и тд (собсно сам Qt под LGPL лицензией) ps. сигналы - слоты это механизм передачи вызовов сигналов в вызов слота, ближайшая аналогия - визуальное программирование логики, там тоже стрелочки между блоками таскаем, откуда тащим - сигнал, куда - слот, вызывая один из нескольких сигналов (физически декларируем метод, реализует сам Qt), вызывается слот к которому сигналы привязаны (физически описывается как метод только в секции slots) |
Ответ: Qt QML : декларативный интерфейс, императивная логика
Вложений: 1
чтобы опробовать инструмент решил написать понг чисто на QML, в принципе результирующий код вышел немного громоздким из-за асинхронного javascript кода и qml анимаций
мышкой управляются обе платформы, скорость игры постепенно увеличивается, необходимо набрать наибольшее количество очков :) Код:
// imports подход выполнения логики в javascriptе мне совсем не понравился, он слишком сырой сейчас, попробую еще реализовать логику на C++ |
Ответ: Qt QML : декларативный интерфейс, императивная логика
Один заголовок темы тянет на статью в солидном западном журнале:cool:
Дядя Дима не пугай детей...:4to: ЗЫ Отвлеченный вопрос, сорри. А что такое explicit? Это термин из С++ или...? |
Ответ: Qt QML : декларативный интерфейс, императивная логика
Morganolla
Цитата:
к примеру : Код:
class A Код:
class A |
Ответ: Qt QML : декларативный интерфейс, императивная логика
вышел qt quick 2, намного более шустрый фреймворк для qml
в итоге 1200 прямоугольников, которые случайно перемещаются по экранму и меняют цвет, выдает 60 фпс Код:
import QtQuick 2.0 еще одна хорошая новость, Desktop Components for QML почти готовы к релизу и будут включены в qt 5.1 посмотрите насколько просто и быстро создавать настольные приложения : http://www.youtube.com/watch?v=Y1pqL5bXe0A |
Ответ: Qt QML : декларативный интерфейс, императивная логика
|
Ответ: Qt QML : декларативный интерфейс, императивная логика
Моя опера выдала ~20 фпс... Chrome (Яндекс.Б) ~20, Ыфафкш (Safari то есть под винду) ~65 фпс...
|
Ответ: Qt QML : декларативный интерфейс, императивная логика
Цитата:
ps. модифицированый тест http://pastebin.com/ATdvC6PK, фпс мерялся фрапсом |
Ответ: Qt QML : декларативный интерфейс, императивная логика
Цитата:
HTML нужен только для представления данных, а СSS для их стилизации. Для динамики используется canvas/webgl. |
Ответ: Qt QML : декларативный интерфейс, императивная логика
Цитата:
я ведь не выложил тест где 100500 прямоугольников рисуются шейдером за 1 дип, а то он бы выдал вам 100500 тыс фпс и было бы что canvas в 100500x раз медленее, я выложил честный тест с честными отдельными объектами, они эквивалентны dom, можно такой же тест с xaml провести |
Ответ: Qt QML : декларативный интерфейс, императивная логика
Цитата:
|
Часовой пояс GMT +4, время: 20:25. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot