Проверьте, является ли QQuickView (QWindow) полноэкранным в Qt 5.0.x

Для QWidget мы можем проверить, если он отображается в полноэкранном режиме с flags() & Qt::WindowFullScreen.
То же самое не похоже на работу с QQuickView (который является QQuickWindow который является QWindow), как QWindow::flags() всегда возвращается Qt::WindowMinimized, какой бы ни была причина. Я отображаю окно, используя этот код:

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

В Qt 5.1 QWindow::visibility() был представлен. Возвращает новый тип перечисления, который содержит QWindow::FullScreen и ведет себя правильно.

Как я могу проверить, если QWindow отображается в полноэкранном режиме в Qt 5.0.x? Я хочу реализовать функцию «переключения на весь экран». Отслеживание текущего состояния, кажется, является неправильным способом (однако это был бы возможный обходной путь). Я не понимаю почему QWindow::flags() возвращается Qt::WindowMinimized

Код для воспроизведения вопроса (нажмите ВЕРНУТЬ чтобы увидеть результат 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

3

Решение

Используйте метод QWindow :: WindowState (). Возвращает ключ Qt :: WindowFullScreen что ты ищешь.

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]