2017-01-06 12 views
3

Как перехватить сигнал красной кнопки «x» закрытия диалогового окна в 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.

+0

Считаете ли вы использование сигнала 'onClosing'? https://doc-snapshots.qt.io/qt5-5.7/qml-qtquick-window-window.html#closing-signal –

+0

это не сигнал для диалога в qml: http://doc.qt.io/qt -5/qml-qtquick-dialogs-dialog.html # принятый-сигнал – asdfasdf

+0

Как насчет сигнала 'onVisibleChanged'? – DuKes0mE

ответ

0

Я использую Qt 5.9.1 на Ubuntu и пытаюсь обнаружить кнопку «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(); } 
    } 
}