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

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

3 ответа

Решение

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

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

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

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

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

Краткий ответ: интеграция 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);
    }
}
Другие вопросы по тегам