2012-01-26 114 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