Полноэкранное настольное приложение с QML - PullRequest
12 голосов
/ 26 января 2012

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

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

Ответы [ 5 ]

26 голосов
/ 06 июня 2014

Существует также 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.Controls.

20 голосов
/ 27 января 2012

Если вы хотите использовать бизнес-логику, написанную на 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();
}

Вы можете найти больше информации здесь .

5 голосов
/ 17 февраля 2017

При использовании 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

2 голосов
/ 26 января 2012

Qt имеет qmlviewer .

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

$ qmlviewer -fullscreen -frameless file.qml

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

1 голос
/ 23 января 2019

Вот еще одно отличие от предыдущих ответов, но в нем используется тип QML окна (по умолчанию Qt Quick Application - Empty) и перечисление Qt:

import QtQuick 2.6
import QtQuick.Window 2.2

Window {
    id: mainWindow
    objectName: "mainWindow"
    visible: true
    flags: Qt.FramelessWindowHint | Qt.Window
    color: "black"
    visibility: Qt.WindowFullScreen // << the solution
}
...