如何拦截红色' x'的信号? qml对话框的关闭按钮?
Dialog
{
id : dialog1
visible : false
title : "dialog1"
onRejected:
{
console.log("Red button x clicked signal") // Not working
}
Button
{
id: exitButton
text : "Exit"
onClicked :
{
console.log("exit button clicked") // this works
robotCalibrationDialog.visible = false
}
}
我已经尝试了qml对话框的所有信号,似乎没有一个用于x红色按钮。
答案 0 :(得分:0)
我在Ubuntu上使用Qt 5.9.1并尝试检测" x" /在QML MessageDialog窗口中单击/关闭按钮。文档确实表明onRejected是应该触发的事件 - 但事实并非如此!所以我使用onVisibleChanged
并检查它是否不可见。这很有效。
Item {
signal dialogClosed()
property string dialogTitle: ""
property int dialogIcon: 0
property string dialogText: ""
property bool dialogVisible: false
MessageDialog {
id: messageDialog
title : dialogTitle
icon : dialogIcon
text : dialogText
visible : dialogVisible
modality: Qt.ApplicationModal
onAccepted: dialogClosed()
// onRejected: dialogClosed() // Doesn't work in when "x" is clicked as documented!
onVisibleChanged: { if( !this.visible ) dialogClosed(); }
}
}
答案 1 :(得分:0)
在这里,我希望“ X”按钮的行为与被拒绝时的行为完全相同。您可以根据需要调用其他信号,但我个人认为该信号与被拒绝的信号相同。
signal yesButtonClicked()
signal noButtonClicked()
signal rejectedButtonClicked()
signal acceptedButtonClicked()
property bool xButton: true
Dialog{
id: dialogId
title: dialogTitle
onYes: {
xButton = false
yesButtonClicked()
}
onNo: {
xButton = false
noButtonClicked()
}
onRejected: {
xButton = false
rejectedButtonClicked()
}
onAccepted: {
xButton = false
acceptedButtonClicked()
}
onVisibilityChanged: {
if (!this.visible && xButton){
rejectedButtonClicked()
}
if (this.visible){
xButton = true
}
}