测试QQuickView(QWindow)是否在Qt 5.0.x中全屏显示

时间:2013-07-24 13:02:34

标签: c++ qt qml qt5 qtquick2

对于QWidget,我们可以测试它是否以flags() & Qt::WindowFullScreen全屏显示。 这似乎不适用于QQuickViewQQuickWindowQWindow),因为QWindow::flags()始终返回Qt::WindowMinimized,无论什么原因可能。我使用以下代码显示窗口:

QQuickView w;
w.setSource(...);
w.show(); /* or */ w.showFullScreen();

在Qt 5.1中,引入了QWindow::visibility()。它返回一个新的枚举类型,其中包含QWindow::FullScreen并且行为正常。

如何测试Qt 5.0.x 中的全屏是否显示QWindow?我想实现“切换全屏”功能。跟踪当前状态似乎是错误的方式(但这可能是一种可能的解决方法)。我不明白为什么QWindow::flags()会返回Qt::WindowMinimized ...

重现问题的代码(按 RETURN 查看QWindow::flags()的输出):

test.qml

import QtQuick 2.0
Rectangle {
    signal test();
    width: 100; height: 100
    focus: true
    Keys.onReturnPressed: test()
}

的main.cpp

#include <QGuiApplication>
#include <QQuickView>
#include <QQuickItem>
#include <QDebug>

class Test : public QObject {
    Q_OBJECT
public slots:
    void test() {
        QQuickItem *item = qobject_cast<QQuickItem*>(sender());
        QQuickWindow *window = item->window();
        qDebug() << window->flags(); // Will print 0x1 == Qt::WindowMinimized
    }
};
int main(int argc, char *argv[])
{
    QGuiApplication a(argc, argv);

    QQuickView w;
    w.setSource(QUrl("...(relative path to the qml file from above)..."));
    w.show(); // Please also test w.showFullScreen();

    QObject::connect(w.rootObject(), SIGNAL(test()),
                     new Test, SLOT(test()));

    return a.exec();
}

#include "main.moc"

test.pro

QT += quick
TEMPLATE = app
SOURCES += main.cpp

1 个答案:

答案 0 :(得分:2)

Use method QWindow::windowState()。它返回您寻找的键Qt::WindowFullScreen

bool isFullScreen = w.windowState().testFlag(Qt::WindowFullScreen);