2012-01-26 115 views
8

我有使用flex和AS3開發豐富的用戶界面應用程序的經驗。然而,這個問題很難在現有的C++商業邏輯中使用這些flex應用程序。隨着QML的出現,我很好奇它是否有可能將豐富的UI應用程序與QT重用於C++業務邏輯。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 

也有是創建具有QML全屏應用程序的tutorial。 和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作爲根元素,而不是矩形是很重要的。對於ApplicationWindow,你必須導入QtQuick.Controls。

+0

很適合我,但請注意,有一個錯誤會導致全屏QtQuick MenuBar無法正常工作(至少在Windows上)。 – Timmmm

+0

要使用最大化的窗口,您可以使用:'height:Screen.height;寬度:Screen.width' – nerdoc

1

當使用在C++ QQmlApplicationEngine你可以做的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