Обычные (настольные) элементы управления пользовательского интерфейса с QML? - PullRequest
6 голосов
/ 08 апреля 2011

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

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

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

Ответы [ 3 ]

3 голосов
/ 08 апреля 2011

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

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

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

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

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

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

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

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

1 голос
/ 10 апреля 2011

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

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

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

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

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

1 голос
/ 10 апреля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...