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



我实现了一个功能,在按下两次后退按钮后,它将显示一个弹出窗口,该弹出窗口由两个按钮组成,即yes和cancel,所以当你按下yes时,它会关闭应用程序。我的问题是,当我点击取消按钮时,弹出窗口会关闭,然后当我再次按下后退按钮时,它会关闭应用程序,而不是再次显示弹出窗口。那么我该怎么办呢?我应该通过什么条件?(纯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)
}
}
}
}

最新更新