Поскольку Qt 5.10 можно настроить присоединенное свойство Overlay для элемента Popup. Пример доступен здесь https: //doc.qt.io/qt-5/qml-qtquick-controls2-overlay.html#modal-attached-prop. Это действительно полезно в случаях, когда необходимо изменить фон для Popup, у которого для свойства dim: установлено значение true. Но нет никакой подсказки (по крайней мере для меня) о том, как я могу изменить размер Overlay. Например, у меня есть пользовательское свойство ApplicationWindow, переопределяющее contents:, чтобы иметь возможность рисовать тень над окном (у моего пользовательского окна нет границ) и размещать MouseArea за пределами границ, чтобы имитировать поведение родных окон. Печальная часть - Overlay нарисовано по всей области окна, что делает его некрасивым для области за границами.

Кто-нибудь знает способ настроить размер наложения (по крайней мере, я имею в виду фоновую тень) при использовании свойства dim: в Popup?

Вот типичный код Popup:

Popup {
        id: popupReleaseNotes
        x: Math.round(parent.width/2 - width/2)
        y: Math.round(parent.height/2 - height/2)
        closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
        modal: true
        dim: true
    }

Здесь вы можете увидеть, как это выглядит в моем приложении:

enter image description here

Фон наложения выходит за мои пользовательские границы, что означает, что он занимает всю область ApplicationWindow. И это то, что я пытаюсь изменить. Я не нашел никакого документированного способа до сих пор.

0
user3417815 5 Апр 2020 в 01:07
 – 
eyllanesc
5 Апр 2020 в 02:17
Я добавил скриншот и код Popup. Я не буду добавлять код элемента окна, потому что это не имеет отношения к проблеме. Я только что реализовал пользовательские прозрачные границы, чтобы разместить там MouseArea.
 – 
user3417815
5 Апр 2020 в 02:52

1 ответ

Я предлагаю вам использовать ColorOverlay.

https://doc.qt.io/qt-5/qml-qtgraphicaleffects-coloroverlay.html

В любом случае мне кажется, что вы пропустили Overlay.Modal. Читая документацию(), я ожидал чего-то вроде:

Popup {
        id: popupReleaseNotes
        x: Math.round(parent.width/2 - width/2)
        y: Math.round(parent.height/2 - height/2)
        closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
        modal: true

        visible: true

        Overlay.modal: Rectangle {
               anchors.fill: parent
               color: "#aacfdbe7"
        }
}

PS взгляните на всплывающее окно и его макет, чтобы понять, где может быть проблема между элементом контента и фоном. Возможно, ваше затемнение было сделано на фоне, который больше, чем содержимое. https://doc.qt.io/qt-5/ qml-qtquick-controls2-popup.html

1
Marco Medri 6 Апр 2020 в 17:14
Спасибо за предложение, но я попробовал его, прежде чем задавать вопрос. Этот Rectangle не позволяет изменять размер области наложения.
 – 
user3417815
5 Апр 2020 в 22:46
Что касается второго (около background размера). Да, это правда. Мой пользовательский фон окна равен размеру окна. Могу ли я что-нибудь сделать с dim на другом элементе? К сожалению, я понятия не имею, как это можно сделать. Или отсутствие документов.
 – 
user3417815
5 Апр 2020 в 23:29
Даже с anchors.fill, как я добавил? Вы должны иметь возможность изменять размер прямоугольника по своему усмотрению. В любом случае, не могли бы вы опубликовать всю страницу? Так что может быть легко помочь вам
 – 
Marco Medri
6 Апр 2020 в 17:16
Нет, это не так. К сожалению, он по-прежнему занимает все окно и не может быть привязан к другим элементам.
 – 
user3417815
6 Апр 2020 в 21:56
Спасибо за ваши усилия в любом случае. Думаю, мне нужно опубликовать его в отчетах об ошибках Qt и попросить возможное решение (или подтверждение этого поведения)
 – 
user3417815
6 Апр 2020 в 21:57