Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qml 我应该通过什么条件才能再次显示弹出窗口_Qml - Fatal编程技术网

Qml 我应该通过什么条件才能再次显示弹出窗口

Qml 我应该通过什么条件才能再次显示弹出窗口,qml,Qml,我实现了一个功能,在按下后退按钮两次后,它将显示一个弹出窗口,该弹出窗口由两个按钮组成,即是和取消,因此当你按下是时,它将关闭应用程序。 我的问题是当我点击取消按钮,然后弹出窗口关闭,然后当我再次按下后退按钮,它关闭应用程序,而不是再次显示弹出窗口。那我该怎么办?我应该通过什么条件?(在纯qml中) 这就是我所做的 Popup { visible: false id: popup background:

我实现了一个功能,在按下后退按钮两次后,它将显示一个弹出窗口,该弹出窗口由两个按钮组成,即是和取消,因此当你按下是时,它将关闭应用程序。 我的问题是当我点击取消按钮,然后弹出窗口关闭,然后当我再次按下后退按钮,它关闭应用程序,而不是再次显示弹出窗口。那我该怎么办?我应该通过什么条件?(在纯qml中) 这就是我所做的

Popup  {
               visible: false
               id: popup
               background: Rectangle {
                   width: 300
                   height: 200     
                   }
                   Row{
                       topPadding: 10
                           Button {
                           text: qsTr("YES")                    
                           onClicked:
                           {
                               Qt.quit();
                           }
                           Button{
                           text: qsTr("cancel")
                           height:40
                           width:100
                           onClicked:
                           {
                               popup.close();
                           }
                        }

                   }
               }

               modal: true
               focus: true
           }
Keys.onBackPressed: {
          timer.pressBack()
    }
    Timer{
        id: timer

        property bool  backPressed: false
        repeat: false
        interval: 300//ms
        onTriggered: backPressed = false
        function pressBack(){
            if(backPressed){
                timer.stop()
                backPressed = false
                popup.open();
            }
            else{
                backPressed = true
                timer.start()
            }
        }
    }

我猜会发生这种情况,因为您直接调用close方法,qml而不是关闭弹出窗口,而是调用主窗口的close函数(您没有发布leaveApp函数的代码,所以我无法确定在您的情况下是否会发生这种情况)。您也绝对不需要在popup.open()之后调用leaveApp()

这是我用来测试这个的样本。它应按预期工作:

Keys.onReleased: {
    if (event.key == Qt.Key_Back) {
        event.accepted = true
        timer.pressBack()
    }
}
Timer{
    id: timer 

    property bool  backPressed: false
    repeat: false
    interval: 300//ms
    onTriggered: backPressed = false
    function pressBack(){
        if(backPressed){
            timer.stop()
            backPressed = false
            popup.open();
            //leaveApp()
        }
        else{
            backPressed = true
            timer.start()
        }
    }
}

Popup {
    id: popup
    x: 100
    y: 100
    width: 200
    height: 300
    modal: true
    focus: true
    Row {
        Button {
            text: "ok"
            onClicked: {
                console.log("leave app")
                mainWindow.close()
            }
        }
        Button {
            text: "cancel"
            onClicked: {
                console.log("close popup")
                popup.close() //you have to call close method of popup explicitly (only close() will cause the issue)
            }
        }
    }
}

不,我问的是在点击取消按钮后,当我再次点击手机上的后退按钮时,弹出窗口应该会再次打开。但它不是那样工作的,我只是测试了它,它在我给你发送的示例中按预期工作!你能发布一个完整的代码示例以便我重现问题吗?是的,你的代码运行良好。我也这样做了。但我是说,当你点击取消按钮,然后弹出窗口关闭,当你再次点击你的设备上的后退按钮,然后它应该再次显示弹出窗口。你说的设备。。。你是说电脑吗?或者你在为手机开发?也许你应该在你的问题中提到它!它是用于移动应用的