使用QML的全屏桌面应用程序

ice*_*man 13 qt4 fullscreen qml

我有使用flex和AS3开发丰富的用户界面应用程序的经验.然而,问题是它很难在这些flex应用程序中使用现有的c ++业务逻辑.随着QML的出现,我很好奇是否有可能将Q ++业务逻辑与QT一起用于丰富的UI应用程序.

我想知道是否有可能为桌面开发全屏丰富的用户界面应用程序(在移动设备中变得越来越常见).例如(http://blog.flexexamples.com/2007/08/07/creating-full-screen-flex-applications/)Adobe有Flash Player,可以在全屏模式下使用,并运行用AS3编写的内容.是否可以使用QT/QML编写类似的应用程序?

JuS*_*chu 27

还有一种仅限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"
    }
}
Run Code Online (Sandbox Code Playgroud)

但是使用ApplicationWindow作为根元素而不是Rectangle很重要.对于ApplicationWindow,您必须导入QtQuick.Controls.

  • 要使用最大化的窗口,可以使用:`height:Screen.height; 宽度:屏幕宽度 (2认同)
  • 还有一些枚举,而不是那些字符串,如Window.FullScreen等。在Qt 5.11中,它还与您从属性读取的值匹配(即,不要尝试将“ Windowed”作为值进行测试,这永远不会发生) ) (2认同)

小智 20

如果您想使用在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();
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到更多信息.


小智 5

在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();
}
Run Code Online (Sandbox Code Playgroud)

main.qml

import QtQuick 2.7
import QtQuick.Window 2.2

Window {
    id: mainWindow

    Component.onCompleted: {
        mainWindow.showFullScreen();
    }
}
Run Code Online (Sandbox Code Playgroud)

用QT5.8测试


Ric*_*sop 5

这是先前答案的另一个变体,但它使用(默认 Qt Quick Application - Empty)Window QML 类型和 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
}
Run Code Online (Sandbox Code Playgroud)