142 lines
4.3 KiB
QML
142 lines
4.3 KiB
QML
// =============================================
|
||
// =============== 简单消息的界面 ===============
|
||
// =============================================
|
||
|
||
import QtQuick 2.15
|
||
import QtQuick.Controls 2.15
|
||
import QtGraphicalEffects 1.15 // 阴影
|
||
|
||
import "../Widgets"
|
||
|
||
Rectangle {
|
||
id: spMsg
|
||
|
||
property var onHided: undefined // 关闭函数,外部传入
|
||
function show(title, msg, time=5000, icon="bell") {
|
||
textTitle.text = title
|
||
textMsg.text = msg
|
||
nowTime = 0
|
||
allTime = time>0?time:1 // 防止除0
|
||
timerProgressBar.percent = 0
|
||
iconComp.icon = icon // 图标
|
||
timer.start() // 启动计时器
|
||
}
|
||
|
||
property int allTime: 1 // 总时间
|
||
property int nowTime: 0 // 当前时间
|
||
property int interval: 10 // 间隔刷新
|
||
property int shadowWidth: qmlapp.enabledEffect ? size_.spacing*3 : 0 // 边缘阴影宽度
|
||
Timer {
|
||
id: timer
|
||
interval: spMsg.interval // 间隔
|
||
running: false
|
||
repeat: true // 重复执行
|
||
onTriggered: {
|
||
spMsg.nowTime += spMsg.interval
|
||
timerProgressBar.percent = spMsg.nowTime/spMsg.allTime
|
||
if(spMsg.nowTime>=spMsg.allTime) {
|
||
timer.stop() // 停止计时器
|
||
if(typeof onHided === "function")
|
||
onHided() // 调用关闭函数
|
||
return
|
||
}
|
||
}
|
||
}
|
||
|
||
width: size_.line * 20
|
||
height: textTitle.height + textMsg.height+size_.spacing*2
|
||
color: theme.specialBgColor
|
||
radius: qmlapp.enabledEffect ? size_.panelRadius : 0
|
||
// 内容组件
|
||
Item {
|
||
anchors.fill: parent
|
||
anchors.margins: size_.spacing
|
||
// 倒计时 ▽按钮
|
||
HProgressBar {
|
||
id: timerProgressBar
|
||
anchors.top: parent.top
|
||
anchors.right: parent.right
|
||
height: size_.smallLine
|
||
width: size_.smallLine*2
|
||
color: theme.coverColor1
|
||
highlightColor: theme.coverColor2
|
||
radius: size_.btnRadius
|
||
percent: 0
|
||
// 鼠标悬浮背景
|
||
Rectangle {
|
||
id: btnHoverBg
|
||
visible: false
|
||
anchors.fill: parent
|
||
color: theme.coverColor2
|
||
radius: size_.btnRadius
|
||
}
|
||
// 下箭头图标
|
||
Icon_ {
|
||
anchors.fill: parent
|
||
icon: "down"
|
||
color: theme.bgColor
|
||
}
|
||
}
|
||
// 标题图标
|
||
Icon_ {
|
||
id: iconComp
|
||
anchors.top: parent.top
|
||
anchors.left: parent.left
|
||
color: theme.specialTextColor
|
||
height: size_.line
|
||
width: size_.line
|
||
}
|
||
// 标题文字
|
||
Text_ {
|
||
id: textTitle
|
||
anchors.top: parent.top
|
||
anchors.left: iconComp.right
|
||
anchors.leftMargin: size_.line*0.5
|
||
height: size_.line
|
||
verticalAlignment: Text.AlignVCenter // 垂直居中
|
||
}
|
||
// 内容文字
|
||
Text_ {
|
||
id: textMsg
|
||
anchors.top: textTitle.bottom
|
||
anchors.left: parent.left
|
||
anchors.right: parent.right
|
||
anchors.topMargin: size_.smallSpacing
|
||
color: theme.subTextColor
|
||
font.pixelSize: size_.smallText
|
||
wrapMode: TextEdit.Wrap // 尽量在单词边界处换行
|
||
maximumLineCount: 2 // 限制显示两行
|
||
height: text=="" ? 0:undefined // 无文字时高为0,有文字时自动高度
|
||
|
||
}
|
||
}
|
||
MouseArea {
|
||
anchors.fill: parent
|
||
hoverEnabled: true
|
||
onEntered: {
|
||
btnHoverBg.visible = true
|
||
}
|
||
onExited: {
|
||
btnHoverBg.visible = false
|
||
}
|
||
function mouseClicked() {
|
||
timer.stop() // 停止计时器
|
||
if(typeof onHided === "function")
|
||
onHided() // 调用关闭函数
|
||
}
|
||
// 单击隐藏弹窗
|
||
onClicked: mouseClicked()
|
||
// 双击弹出主窗,隐藏弹窗
|
||
onDoubleClicked: {
|
||
qmlapp.mainWin.setVisibility(true) // 主窗可见
|
||
mouseClicked()
|
||
}
|
||
}
|
||
// 边缘阴影
|
||
layer.enabled: shadowWidth>0
|
||
layer.effect: DropShadow {
|
||
transparentBorder: true
|
||
color: theme.coverColor4
|
||
samples: shadowWidth
|
||
}
|
||
} |