在做android开发中我们都知道android中的弹出框有很多种,可以根据自己的需求进行定制添加Style属性,在QML中,我们虽然没有android原生的那么好用,但是我们一样可以使用其他的方式进行实现类似的效果,如下,这是我写的一个简单的页面
import QtQuick 2.0
Item {
id:dialogComponent
anchors.fill: parent
focus: true
PropertyAnimation {
property: "opacity";
duration: 400; from: 0; to: 1;
easing.type: Easing.InOutQuad ; running: true }
// This rectange is the a overlay to partially show the parent through it
// and clicking outside of the 'dialog' popup will do 'nothing'
Rectangle {
anchors.fill: parent
id: overlay
color: "#000000"
opacity: 0.6
// add a mouse area so that clicks outside
// the dialog window will not do anything
MouseArea {
anchors.fill: parent
}
}
模拟Dialog弹出背景效果。设置Rectangle的背景为半透明,并添加MouseArea,当他触发时不予任何响应,就达到了,android中Dialog单击其他地方不消失的效果,然后我们再来写我们的Dialog要显示的样式界面
Rectangle {
id: dialogWindow
width: parent.width/4
height: width*0.5
radius: 2
anchors.centerIn: parent
ColumnLayout{
spacing:dp(0)
anchors.fill: parent
anchors.margins: dp(16)
Label{
text:qsTr('Dialog的标题')
font.pixelSize: dp(18)
}
Label{
text:qsTr('Dialog要显示的内容')
}
Button{
text:'确认'
anchors.right: parent.right
anchors.bottom: parent.bottom
backgroundColor: 'white'
onClicked: {
//单击确认时 添加自己单击确认时的逻辑
//也可以自定定义一个signal 方法进行处理。
dialogComponent.visible=false
}
}
}
}
我的Dialog、很简单,就是一个简单的弹框,一个标题,一个内容,一个确认的button ,这个是根据自己需求随意定制,接下来我们要写的就是 关于单击返回键的处理了,代码如下
Keys.onBackPressed: {
if(dialogComponent.visible){
event.accepted = true
return;
}else{
event.accepted = false
}
}
在单击返回键时判断但前页面是否是显示状态,如果是显示状态,就不予响应,否则就执行返回操作,基本上一个简单的类似系统级别的Dialog就完成了。
在需要的页面进行声明,然后,使用sessionDialog.visible为true时就可以了。
UDialog{
id:sessionDialog
anchors.fill: parent
visible: false;
}