2014-07-04 94 views
1

我使用QML在我的app +簡單邏輯中構建GUI。 在某個步驟中,我打開對話框,關閉它之後,我想要取回結果值。 這是示例代碼:從QML窗口返回父值

Button { 
    id: myButton 
    onClicked: { 
    var component = Qt.createComponent("Dialog.qml"); 
    if (component.status === Component.Ready) { 
     var dialog = component.createObject(parent); 
     dialog.show(); 
     dialog.onClosing: {} // that not works 
    } 
    } 
} 

Dialog.qml:

import QtQuick 2.2 
import QtQuick.Window 2.1 
import QtQuick.Controls 1.1 

Window { 
    id: dialogWindow 
    width: 800 
    height: 600 
    flags: Qt.Dialog 

    Button { 
    id: closeButton 
    onClicked: { 
     dialogWindow.close(); 
    } 
    } 
} 

但我不知道我怎麼可以得到一些回報值對話框關閉後。

+0

你想得到什麼樣的回報值?在對話框中沒有輸入或選擇。 –

回答

3

我的建議是不打擾Window和使用Qt Quick Dialogs

例如,如果您想要使用Window,則必須在窗口中以某種「是/否」按鈕的形式定義自己的返回值。當其中一個被點擊時,將yes屬性設置爲true/false。然後,在您Button

Connections { 
    target: dialogWindow 
    onVisibleChanged: // some action depending on value of "yes" property 
} 

請注意,我用onVisibleChanged代替onClosing,因爲後者只在所發出的user closing the window

當用戶試圖關閉窗口這個信號被髮射。

如果我們遵循的CloseEvent參數的文件,我們看到它在稍微詳細真實解釋說:

通知一個窗口即將由窗口系統被關閉(例如,用戶點擊標題欄關閉按鈕)。

+0

感謝@Mitch,Connections的想法正是我需要的。 – folibis

+0

所以,我使用'onClosing'信號。不幸的是,當我用x按鈕關閉窗口時會觸發,當我從代碼關閉窗口時不起作用:'dlg.close()'。也許QML中有一些錯誤? – folibis

+0

是的,這就是爲什麼我建議'onVisibleChanged'。這不是一個錯誤,它可以被記錄得更好一點。我已經更新了我的答案。 – Mitch