C++ 测试QQuickView(QWindow)在Qt5.0.x中是否为全屏

C++ 测试QQuickView(QWindow)在Qt5.0.x中是否为全屏,c++,qt,qml,qt5,qtquick2,C++,Qt,Qml,Qt5,Qtquick2,对于QWidget,我们可以测试它是否以全屏显示。 这似乎不适用于(这是一个QQuickWindow,这是一个QWindow),不管原因是什么,它总是返回。我使用以下代码显示窗口: QQuickView w; w.setSource(...); w.show(); /* or */ w.showFullScreen(); 在Qt5.1中,引入了。它返回一个新的枚举类型,该类型包含并正确运行 如何测试Qt5.0.x中的QWindow是否全屏显示?我想实现一个“切换全屏”功能。跟踪当前状态似乎是错

对于
QWidget
,我们可以测试它是否以全屏显示。 这似乎不适用于(这是一个
QQuickWindow
,这是一个
QWindow
),不管原因是什么,它总是返回。我使用以下代码显示窗口:

QQuickView w;
w.setSource(...);
w.show(); /* or */ w.showFullScreen();
在Qt5.1中,引入了。它返回一个新的枚举类型,该类型包含并正确运行

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

再现问题的代码(按RETURN键查看的输出):

测试.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"
使用方法。它返回您要查找的密钥

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

你试过这个
bool isFullScreen()const
@Samoth吗?我找不到这样的函数。是吗?您可以查看实际的Qt版本并从中获取代码。有什么真正的理由留在5.0吗?@DmitrySazonov不再是了。我想保留我的应用程序对Qt 5.0的支持,但出于其他原因,我放弃了Qt 5.0,现在要求>=5.1。我投票将这个问题作为离题题来结束,因为到今天为止,它已被弃用,不再相关。好吧,现在这个问题已被弃用,因为我要求一个专门针对Qt 5.0的解决方案(在5.1之前,当引入
visibility()
时,如另一个答案中所述)。感谢您仍然回答它!:)事实上,对我来说,它仍然是相关的,因为我支持应该与Qt 5.0一起工作的代码。
bool isFullScreen = w.windowState().testFlag(Qt::WindowFullScreen);