Полноэкранные приложения с QML

У меня есть опыт разработки богатых приложений пользовательского интерфейса с flex и AS3. Однако проблема заключается в том, что очень сложно использовать существующую бизнес-логику c++ с этими приложениями flex. С появлением QML мне интересно, можно ли повторно использовать бизнес-логику c++ с QT для богатых приложений UI.

Я хочу знать, можно ли разрабатывать полноэкранные приложения с богатым пользовательским интерфейсом(которые становятся все более распространенными, особенно на мобильных устройствах) для рабочий стол. Для example(http://blog.flexexamples.com/2007/08/07/creating-full-screen-flex-applications/) Adobe имеет Flash Player, который может использоваться в полноэкранном режиме и запускает контент, написанный на AS3. Можно ли писать подобные приложения с помощью QT / QML?

4 ответов


Если вы хотите использовать бизнес-логику, написанную на C++ , и некоторый пользовательский интерфейс QML, вы можете использовать QDeclarativeView внутри вашего приложения. Это просто обычный виджет Qt, поэтому у него есть метод showFullScreen(). На самом деле этот класс похож на "qmlviewer внутри вашего приложения".

Так вы получите что-то вроде этого:

#include <QtGui/QApplication>
#include <QtDeclarative/QDeclarativeView>
#include <QtCore/QUrl>

int main(int _argc, char * _argv[])
{
    QApplication app(_argc, _argv);

    QDeclarativeView view;
    view.setSource(QUrl("qrc:/MyGui.qml"));    // if your QML files are inside 
                                               // application resources

    view.showFullScreen();    // here we show our view in fullscreen

    return app.exec();
}

вы можете найти более подробную информацию здесь.


существует также QML-единственный способ перейти в полноэкранный режим. Вы можете использовать это, если вы не используете QDeclarativeView, но QQmlApplicationEngine, так как последний не наследует QWidget и не имеет метода showFullScreen().

import QtQuick 2.2
import QtQuick.Controls 1.1

ApplicationWindow {
    id: window
    visible: true
    visibility: "FullScreen"
    width: 640
    height: 480

    Button {
        text: "exit fullscreen"
        onClicked: window.visibility = "Windowed"
    }
}

но важно использовать ApplicationWindow в качестве корневого элемента, а не прямоугольник. Для ApplicationWindow вы должны импортировать QtQuick.Контроли.


при использовании QQmlApplicationEngine в C++ вы можете сделать что-то вроде этого в QML:

main.cpp

#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

main.в QML

import QtQuick 2.7
import QtQuick.Window 2.2

Window {
    id: mainWindow

    Component.onCompleted: {
        mainWindow.showFullScreen();
    }
}

испытано с QT5.8


в Qt есть qmlviewer.

чтобы запустить его в полноэкранном режиме:

$ qmlviewer -fullscreen -frameless file.qml

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