Дизайн пользовательского интерфейса на QML или C ++, BB10

Мне нужно написать приложение BB-10.
В приложении может быть довольно сложный пользовательский интерфейс с динамическими страницами и т. Д.
Я думаю написать логику приложения (модели данных и т. Д.)
в C ++.
Должен ли я использовать QML для дизайна пользовательского интерфейса? Насколько хорошо и гибко идет интеграция?
между C ++ и QML? Не столкнусь ли я с некоторыми проблемами?
Мой пользовательский интерфейс может состоять из множества страниц QML (или диалогов, отображаемых на панелях навигации и т. Д.),
и когда пользователь нажимает на некоторые действия в QML, я могу вызвать C ++
код или перейти на другие страницы QML и т. д.
Спасибо за помощь.

2

Решение

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

Интеграция QML и C ++ проста, если вы хорошо используете инфраструктуру Qt, используя QObjects, Q_PROPERTY а также Q_INVOKABLE методы … это действительно легко.

РЕДАКТИРОВАТЬ: Я должен добавить, однако, что я не нашел доступ к объектам QML из C ++ так просто, как наоборот. Это связано с тем, что QML организует объекты в иерархии из нескольких типов данных, и вы должны динамически обнаруживать дочерние узлы, используя findChild или проверка objectName,

В любом случае, поскольку QML позволяет связывать свойства, вы должны иметь возможность создавать некоторые классы C ++ с вашими данными и получать к ним доступ через пользовательский интерфейс без особых усилий;)

4

Другие решения

Я также прохожу через такую ​​ситуацию, когда вам нужен контроль над приложением с использованием C ++, когда qml не так уж и много. Лучший способ наследовать ваш класс с помощью NavigationPane и поместить туда логику, добавив вашу первую страницу, используя QmlDocument::create() если у вас есть страница рядом с навигационной таблицей, добавьте метод к этому классу, который Q_INVOKABLE и передать setContext этот класс, когда вы создаете новую страницу, используя QmlDocument::create() чтобы получить доступ к этим методам .. наконец, никогда не забывайте добавлять или обрабатывать OnTrasitionEnded(Page*) сигнал для удаления страниц и освобождения памяти

1

Краткий ответ: интеграция C ++ / QML очень хорошая. Иногда это может быть очень многословно, но в C ++ вы ничего не можете сделать.

Даже если делать все в C ++ немного быстрее. BlackBerry продвигает идею кодировать весь рабочий процесс пользовательского интерфейса в QML / Javascript.

Преимуществом будет четкое разделение между бизнес-логикой & поток приложения. Еще одним преимуществом является то, что QML короче, чтобы написать и, надеюсь, поддерживать. Не забывайте, что вы можете создавать новые объекты QML в C ++.

onTriggered: {
var item = dataModel.data(indexPath);
if (item.count > 0) {
appLogic.updateFeed(item.id);
navPane.push(resultPage);
}
}
1