如何让对话框变红' x' QML中的关闭按钮信号

时间:2017-01-06 15:39:04

标签: qt dialog qml

如何拦截红色' 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红色按钮。

2 个答案:

答案 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
        }
    }