如何在QML中获取对话框红色'x'关闭按钮信号



如何在 qml 中拦截对话框的红色"x"关闭按钮的信号?

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
           dialog1.visible = false
        }
    }

我已经尝试了qml对话框的所有信号,但似乎没有一个适用于x红色按钮。

在这里,我希望"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
        }
    }

我在 Ubuntu 上使用 Qt 5.9.1 并尝试检测在 QML MessageDialog 窗口中单击的"x"/关闭按钮。 文档确实表明 onReject 是应该触发的事件 - 但它没有! 所以我使用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(); }
    }
}

最新更新