99 lines
2.8 KiB
QML
99 lines
2.8 KiB
QML
|
|
// ===========================================
|
|||
|
|
// =============== 模态弹窗基类 ===============
|
|||
|
|
// ===========================================
|
|||
|
|
|
|||
|
|
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: {}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|