2017-05-09 127 views
0

我有一个主窗口在QML,我想当我点击button上,modal window可以弹出。模式窗口不工作

我试过,但it is not working,我不明白为什么:

Rectangle { 
    id: root 

    ... 

    Button { 
     onClicked: { 
      var factory = Qt.createComponent("DialogWindow.qml"); 
      var dialog = factory.createObject(root); 
      dialog.show(); 
     } 
    } 
} 

main.qml

Window { //I also tried "Dialog" 
    height: 240 
    width: 320 
    title: qsTr("Popup") 
    visible: true 
    modality: 1 

    ListView{ 
     //My stuff 
    } 
} 

DialogWindow.qml

这里是错误:

TypeError: Cannot call method 'show' of null 

我在做什么错?

+0

如果使用'Dialog'它应该通过[默认模式(http://doc.qt.io/qt-5/qml-qtquick-dialogs-dialog.html#modality-prop) - 对我来说,如果我完全不沾染这种形态,它的工作是完美无缺的。如果我设置'modality:1',我得到错误:'无效的属性分配:未知的枚举'。对于'modality:Qt.WindowModal',它再次正常。 'Qt.ApplicationModal'也一样。 – derM

回答

1

如果你读的modal的属性格式的文档,它说

Possible values are Qt.NonModal (the default), Qt.WindowModal, and Qt.ApplicationModal.

那么,为什么你不使用它们,而不是0或1的硬编码?

modality: Qt.ApplicationModal 
+0

你好,实际上这个线程的例子是错误的。 如果我写'dialog.show()',我会有以下错误'TypeError:无法调用方法'显示'为空' –

+0

好,所以你的'factory.createObject(root)'失败并返回'null'?它应该像那样工作。 – xander

+0

是的,我认为是。但我不明白为什么。这可能是因为“形式”。 –