Обычный (настольный) пользовательский интерфейс с QML?

в настоящее время я портирую одно из своих приложений на C++ С QT в качестве GUI. QML-образцы выглядят чертовски хорошо, но элементы управления пользовательского интерфейса не похожи на обычные в Windows и MacOS.

Я хотел бы использовать множество интересных функций, которые предлагает QML (например, анимацию), но также имеют элементы управления, которые похожи на обычные (как если бы я использовал стандартный QT).

могу ли я найти некоторые стилизованные QML-элементы управления где-нибудь или какой подход вы бы порекомендовали.

3 ответов


хедж, есть 2 причины, почему ваш пользовательский интерфейс не выглядел уроженца:

1) Qt Quick (QML) теперь находится в стадии, когда доступны только базовые примитивы. Это означает, что нет фактических элементов пользовательского интерфейса (например, кнопки, панели инструментов и т. д.) пока отсутствуют. Есть только некоторые из них, как представления списка, которые включены в базовый набор компонентов. Существует некоторая работа, которая происходит с Qt guys, и вы можете найти некоторые из доступных компонентов рабочего стола здесь:

http://qt.gitorious.org/qt-components/desktop

Они будут выглядеть родными на рабочем столе, но в данный момент они находятся на очень ранней и нестабильной стадии.

2) Qt Quick (QML) разработан компанией Qt Development Framework (бывший Trolltech), принадлежащей Nokia, которая, в свою очередь, является одним из крупнейших производителей сотовых телефонов в мире. Qt Quick создан для сенсорных пользовательских интерфейсов на мобильных и встроенных платформах и изначально была нацелена на платформу MeeGo. Набор компонентов QML для MeeGo разрабатывается, но в соответствии с Qt Development Framework блог не доступен для общественности по маркетинговым причинам. Версию, которая доступна для общественности не устарела, но вы можете получить некоторое представление о том, что происходит. Его можно найти здесь:

http://qt.gitorious.org/qt-components

Если ваше приложение разработано для рабочего стола, я бы рекомендовал использовать C++ / Qt для desktop framework, который обеспечит родной внешний вид вашего приложения. Хотя Qt Development Framework недавно заявила, что их основной стратегией становится Qt Quick при передаче коммерческих лицензий и поддержки компании Digia. Поэтому, возможно, имеет смысл подумать о том, стоит ли использовать настольную версию Qt или нет.

надеюсь, что это поможет


вы можете вставлять QWidgets и использовать их из QML. Он занимает немного C++ и не так хорош, как чистые виджеты QML, но он работает довольно хорошо и дает вам доступ ко многим существующим функциям Qt.

можно использовать QGraphicsWidget как объяснить (кратко) здесь. В качестве альтернативы вы можете сделать обратное: внедрить интерфейс QML внутри Qt GUI, используя QDeclarativeView как пояснил здесь.


Дэн, это способ сделать это, но: я бы сказал, что это способ "просто сделать это" без какого-либо рассмотрения того, правильно это или неправильно. Кроме того, я не говорю, что ваше решение неверно, я просто пытаюсь объяснить, почему Я считаю приложения не должны быть реализованы таким образом.

прежде всего, как я уже упоминал, Qt Quick, как следует из его названия, предназначен для создания пользовательских интерфейсов быстро. Попытка встроить виджеты рабочего стола Qt в графику сцена создаст дополнительные усилия (которые могут быть довольно большими - в зависимости от задачи) экспорта API в среду QML и заставить все работать. Архитектура приложения QML сильно отличается от настольного компьютера. Например, если вы работаете с Model-view-controller, экспорт QTreeView и QItemDelegate в QML и его работа могут превратиться в очень сложное решение. На самом деле, если следовать этой концепции, самым простым способом было бы создать весь пользовательский интерфейс в C++ backend и экспортировать окончательное решение QML, но это на самом деле is настольная реализация, которая не использует никаких преимуществ QML вообще. Если делать реализации таким образом, его гораздо проще использовать Qt Animation API, который обеспечивал бы те же "жидкие" эффекты, что и QML, но просто используя чисто QGraphicsView.

во-вторых, если вы хотите использовать существующие виджеты рабочего стола в QGraphicsView, вам придется встроить их в качестве "прокси-виджетов", которые, по словам парней Nokia, которые работают на Qt Quick и QML имеет большие проблемы с производительностью.

В-третьих, если вы хотите использовать подход QGraphicsWidget, это приведет вас к реализации всех виджетов с нуля, потому что в Qt нет виджетов на основе QGraphicsWidget. Даже для чего-то простого, как кнопка виджета вам нужно будет написать весь код самостоятельно.

в-четвертых, как Nokia заявила ранее, они передали поддержку рабочего стола Qt сторонней компании, объяснив, что они фокусируют все свои усилия на Qt быстрая. Поэтому я бы подумал о ремонтопригодности вашего приложения. Кроме того, с предстоящим графом сцены QML все API QML будут перемещены на эту реализацию, и я не уверен, что с ним все еще можно будет использовать виджеты рабочего стола.