2012-01-26 2 views
8

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

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

ответ

18

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

Вы можете найти более подробную информацию here.

+0

Я зарегистрировался на +1. Я попробовал интернет для примера, как получить файл QML, загруженный в приложение Qt, около 20 минут, пока я не нашел это. Возможно, мне нужно научиться лучше использовать Google. В любом случае, большое вам спасибо! – Carrotman42

2

Qt имеет qmlviewer.

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

$ qmlviewer -fullscreen -frameless file.qml 

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

19

Существует также 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 как корневой элемент, а не Rectangle. Для ApplicationWindow вам необходимо импортировать QtQuick.Controls.

+0

Работал хорошо для меня, но обратите внимание, что есть ошибка, которая делает полноэкранный QtQuick 'MenuBar' не работает правильно (по крайней мере, в Windows). – Timmmm

+0

Чтобы использовать окно максимально, вы можете использовать: 'height: Screen.height; width: Screen.width' – nerdoc

1

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

Смежные вопросы