Черный экран после существующего полноэкранного режима - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь сделать такую ​​вещь:

  1. У меня главное окно с одной кнопкой.
  2. После нажатия этой кнопки на всех экранах появляются два полупрозрачных окна. Они в полноэкранном режиме.
  3. Через 4 секунды экраны исчезают.

Все в порядке. Но когда я щелкаю один из экранов, во время процесса исчезновения он становится полностью черным. Как я могу это исправить?

// main.qml

import QtQuick 2.10
import QtQuick.Window 2.10
import QtQuick.Controls 2.2

Window {
    id: main
    visible: true
    width: 100
    height: 50
    title: "Hello Splash World"

    Button {
        anchors.fill: parent
        text: "Show splash"
        onClicked: {
            for (var i = 0; i < Qt.application.screens.length; ++i) {
                var component = Qt.createComponent("SplashScreen.qml");
                var window = component.createObject(main, {screen: Qt.application.screens[i]});
                window.height = Qt.application.screens[i].height
                window.width = Qt.application.screens[i].width
                window.showSplash()
            }
        }
    }
}

// SplashScreen.qml

import QtQuick 2.10
import QtQuick.Controls 2.2

ApplicationWindow {
    id: splash

    flags: Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.WA_TranslucentBackground
    color: "transparent"

    Timer {
        running: true
        interval: 4000
        onTriggered: hideSplash()
    }

    function showSplash() {
        appearAnimation.start()
    }

    function hideSplash() {
        disappearAnumation.start()
    }

    background: Rectangle {
        id: bg
        color: "black"
        opacity: 0.8
    }

    SequentialAnimation {
        id: appearAnimation

        PropertyAction { target: splash; property: "visibility"; value: ApplicationWindow.FullScreen }
        NumberAnimation { target: bg; property: "opacity"; duration: 1000; to: 0.8 }
    }

    SequentialAnimation {
        id: disappearAnumation

        NumberAnimation { target: bg; property: "opacity"; duration: 2000; to: 0 }
        PropertyAction { target: splash; property: "visibility"; value: ApplicationWindow.Hidden }
    }
}

1 Ответ

0 голосов
/ 13 ноября 2019

Я столкнулся с некоторыми странными проблемами с перекрашиванием во время дальнейшей разработки моей программы. Например, изменение размера основной формы привело к появлению черной формы. Решение, которое я нашел, заключается в использовании OpenGL для рендеринга. Вы можете сделать это, вставив этот код:

QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...