Qml 我应该通过什么条件才能再次显示弹出窗口
我实现了一个功能,在按下后退按钮两次后,它将显示一个弹出窗口,该弹出窗口由两个按钮组成,即是和取消,因此当你按下是时,它将关闭应用程序。 我的问题是当我点击取消按钮,然后弹出窗口关闭,然后当我再次按下后退按钮,它关闭应用程序,而不是再次显示弹出窗口。那我该怎么办?我应该通过什么条件?(在纯qml中) 这就是我所做的Qml 我应该通过什么条件才能再次显示弹出窗口,qml,Qml,我实现了一个功能,在按下后退按钮两次后,它将显示一个弹出窗口,该弹出窗口由两个按钮组成,即是和取消,因此当你按下是时,它将关闭应用程序。 我的问题是当我点击取消按钮,然后弹出窗口关闭,然后当我再次按下后退按钮,它关闭应用程序,而不是再次显示弹出窗口。那我该怎么办?我应该通过什么条件?(在纯qml中) 这就是我所做的 Popup { visible: false id: popup background:
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)
}
}
}
}
不,我问的是在点击取消按钮后,当我再次点击手机上的后退按钮时,弹出窗口应该会再次打开。但它不是那样工作的,我只是测试了它,它在我给你发送的示例中按预期工作!你能发布一个完整的代码示例以便我重现问题吗?是的,你的代码运行良好。我也这样做了。但我是说,当你点击取消按钮,然后弹出窗口关闭,当你再次点击你的设备上的后退按钮,然后它应该再次显示弹出窗口。你说的设备。。。你是说电脑吗?或者你在为手机开发?也许你应该在你的问题中提到它!它是用于移动应用的