Всплывающее окно в qml: (closePolicy: Popup.NoAutoClose) - PullRequest
0 голосов
/ 07 августа 2020

Когда я использую closePolicy: Popup.NoAutoClose, это всплывающее окно открывается все время и не закрывается (что действительно). Когда я переключаюсь на другой экран, всплывающее окно открывается и отображается также на других экранах. Как избежать такого поведения?

Примечание: я хочу, чтобы всплывающее окно было видимым c на том конкретном экране, где оно открыто, а не на других экранах.

1 Ответ

0 голосов
/ 07 августа 2020

Вы можете использовать Binding для управления видимостью всплывающего окна на основе имени экрана, на котором оно было открыто:

import QtQuick 2.12
import QtQuick.Controls 2.12

ApplicationWindow {
    id: window
    width: 400
    height: 400
    visible: true

    Popup {
        id: popup
        width: 200
        height: 200
        visible: true
        closePolicy: Popup.NoAutoClose

        property string originalScreenName

        Component.onCompleted: originalScreenName = ApplicationWindow.window.screen.name

        Binding {
            target: popup
            property: "visible"
            value: popup.ApplicationWindow.window.screen.name === popup.originalScreenName
        }
    }
}

Я не знаю, может ли свойство name измениться в течение времени жизни приложение (например, из-за того, что пользователь переименовал его), но пока что это единственный способ однозначной идентификации экрана, который я нашел, поскольку другие свойства, такие как serialNumber, не установлены для меня, а QTBUG-85934 предотвращает сравнение экранных объектов.

...