Files
work-secretfile-selfcheck/UmiOCR-data/qt_res/qml/Popup_/MaskLayer.qml

77 lines
2.3 KiB
QML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// =========================================
// =============== 全屏遮罩层 ===============
// =========================================
import QtQuick 2.15
import QtQuick.Controls 2.15
import "../Widgets"
Popup {
// 展示遮罩层。同一个id重复调用时可刷新显示文本。
function showMask(msg="", id="") {
if(msgDict === undefined)
msgDict = {}
if(!(id in msgDict)) // 新加入的id
idList.push(id)
msgDict[id] = msg // 刷新消息字典
message = msg // 刷新消息显示
visible = true // 开启显示状态
}
// 隐藏指定id的遮罩层
function hideMask(id="") {
if(id in msgDict) { // id已记录则移除对应项
delete msgDict[id]
const index = idList.indexOf(id)
if(index !== -1)
idList.splice(index, 1)
}
// 不存在激活的id时解除显示状态
if(idList.length === 0) {
visible = false
}
// 否则寻找上一个激活的id刷新显示文本
else {
const lastID = idList[idList.length - 1]
const msg = msgDict[lastID] || ""
message = msg
}
}
property string message: ""
property var idList: [] // 存放所有已显示的id有序
property var msgDict: {} // key为idvalue为消息文本
visible: false
modal: true // 阻止按键穿透
closePolicy: Popup.NoAutoClose
parent: Overlay.overlay
anchors.centerIn: parent
property int maxWidth: parent.width - size_.line*10
width: text.width + size_.spacing*2
height: text.height + size_.spacing*2
// 背景
background: Rectangle {
visible: message!==""
color: theme.bgColor
radius: size_.panelRadius
Text_ {
id: text
anchors.centerIn: parent
text: message
width: textMetrics.width > maxWidth ? maxWidth : implicitWidth // 宽度根据内容自适应,不超过 maxWidth
wrapMode: textMetrics.width > maxWidth ? Text.Wrap : Text.NoWrap
}
}
// 文本宽度测量器,不可见
Text_ { // TextMetrics不准确只能用普通Text
id: textMetrics
visible: false
text: message
}
}