Files
work-secretfile-selfcheck/UmiOCR-data/qt_res/qml/Widgets/ModalLayer.qml

99 lines
2.8 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 QtGraphicalEffects 1.0
Rectangle {
id: mRoot
visible: false
color: theme.coverColor4
property alias contentItem: mPanel.data
property string closeText: qsTr("保存并返回") // 右上角关闭提示文本
onVisibleChanged: {
focus = visible
if(!visible) {
// 当父组件隐藏导致子组件连锁隐藏时显式将visible设为false
// 以避免父组件显示时 子组件也连锁显示导致的重加载bug。
visible = false
// 主标签页容器重新取得焦点,让主窗口继续接收键盘事件
mainContainer.focus = true
}
}
// Esc 退出
focus: false
Keys.enabled: true
Keys.onEscapePressed: mRoot.visible = false
Component.onCompleted: {
if(!closeText)
closeText = qsTr("返回")
closeText += " (Esc)"
}
// 模糊效果
// GaussianBlur {
// anchors.fill: parent
// source: mRoot.parent
// visible: qmlapp.enabledEffect
// cached: true
// radius: 8
// samples: 16
// }
// 底层鼠标事件
MouseArea {
id: bottomArea
anchors.fill: parent
onWheel: {} // 拦截滚轮事件
hoverEnabled: true // 拦截悬停事件
onClicked: mRoot.visible = false // 单击关闭面板
cursorShape: Qt.PointingHandCursor
}
property bool inBottom: bottomArea.containsMouse
// 关闭提示
Item {
anchors.top: parent.top
anchors.right: parent.right
anchors.rightMargin: size_.line * 2
anchors.topMargin: size_.line * 0.25
Rectangle {
id: closeIconRect
anchors.right: parent.right
width: size_.line * 1.5
height: size_.line * 1.5
radius: size_.btnRadius
color: theme.bgColor
Icon_ {
anchors.fill: parent
color: theme.noColor
icon: "no"
}
}
Text_ {
visible: closeText
anchors.right: closeIconRect.left
anchors.rightMargin: size_.spacing
anchors.verticalCenter: closeIconRect.verticalCenter
text: closeText
color: theme.bgColor
font.pixelSize: size_.smallText
}
}
// 内容面板
Panel {
id: mPanel
anchors.fill: parent
anchors.margins: size_.line * 2
color: theme.bgColor
// 面板拦截鼠标事件
MouseArea {
id: panelArea
anchors.fill: parent
// hoverEnabled: true
onClicked: {}
}
}
}