Qt for android 中做出系统级Dialog

在做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;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值