С++ Analogue для WPF
Итак, я недавно обманул WPF, и я должен сказать, что мне очень нравится эта идея. Мне нравится каркас в целом, от GUI до сантехники.
Однако, насколько мне нравится управляемая земля, я так же люблю свой родной код. Поэтому мне интересно, какие библиотеки существуют для С++, которые захватывают суть различных частей WPF. Я не ищу решения interop и не хочу решений Managed С++ или С++/CLI, но чистых решений на С++.
Теперь я не ожидаю найти "копию" WPF для С++ - я бы не ожидал, что это будет существовать и мне не понадобится. Вместо этого я ожидал бы, что разные библиотеки могут захватить подмножество желаемых концепций. Мои особые интересы
-
Аппаратная ускоренная графика для графического интерфейса на основе виджета (через DirectX или OpenGL, предпочтительно на последнем)
-
Декларативный язык для GUI-дизайна (желательно диалект XML)
-
Связывание данных
-
Независимость от разрешения (менее важно)
Чтобы немного рассказать о моих рассуждениях, я хотел бы сам реализовать такую библиотеку, которая фиксирует определенную модель, которую я начал разрабатывать. Я собираюсь найти еще несколько вдохновений и полезных ресурсов, прежде чем заблокировать свой дизайн. Библиотека должна быть кросс-платформенной, поэтому ссылки на кросс-платформенные идеи были бы большими, но не обязательно, поскольку я обычно способен переводить вещи в кросс-платформенные решения.
Наконец, хотя я пишу библиотеку С++, и идеи на С++ были бы замечательными, я открыт для идей с любого родного языка.
Заранее благодарим за помощь.
Ответы
Ответ 1
- На самом деле ничего подобного нет. Во всяком случае, это не межплатформенная платформа. Direct2D работает достаточно хорошо, но, очевидно, является Windows-only. И NVIDIA недавно отказалась от этого "пути" расширения OpenGL, который похож на базовую функциональность, но это NVIDIA-only (и недоступно в Mac OSX). Каир имеет бэкэнд OpenGL, но я понятия не имею, насколько он хорош. Это не может быть так хорошо, если Mozilla выбрасывает Каир в пользу D2D в Windows.
- Многие графические инструменты GUI имеют определенный язык для создания графического интерфейса. Qt имеет тот, который предварительно скомпилирован в С++.
- Не то, чтобы я знал. Связывание данных требует некоторой формы отражения (привязка данных в стиле WPF делает), а С++ не имеет встроенной поддержки для отражения. Таким образом, вам нужно будет реализовать отражение какого-то рода, прежде чем вы сможете даже начать работу с привязкой данных в стиле WPF.
- Это с №1. Более или менее, поскольку любой рендеринг на основе графического процессора сможет работать с произвольными разрешениями.
Я люблю С++, но, честно говоря, такого рода вещи лучше всего подходят для языка более высокого уровня. Отсутствие поддержки рефлексии, основанной на языковой поддержке, приведет к тому, что внедрение данных приведет к огромной боли. Принимая во внимание, что вы можете просто реализовать низкоуровневый "рендеринг материала в области" и базовое управление окнами/событиями на С++, а затем выставить его на язык сценариев, где привязка данных и такая работа. Таким образом, у вас есть скорость собственного кода, где вам это нужно, но универсальность и отражение языка сценариев для работы с графическим интерфейсом и связанными с ним данными.
Ответ 2
Я опаздываю на несколько лет, но для кого-то другого, кто читает этот вопрос: вы ищете Qt Quick/QML:
http://qt-project.org/doc/qt-4.8/qml-intro.html
http://doc.qt.io/qt-5/qtqml-cppintegration-topic.html