0

就在我调试我的程序试图破坏由 动态创建的弹出窗口Qt.createComponent(...)时,它偶尔会发生异常。

在此处输入图像描述

以下是相关代码:

ApplicationWindow {
    id: window
    property var dialog
    ...
    Component.onCompleted: {
        var dialogComponent = Qt.createComponent("qrc:/TestPopup.qml")
        dialog = dialogComponent.createObject(...)
        dialog.closed.connect(function(){ [] })
        dialog.open()
    }

    Timer {
    id: timer
    interval: 3000
    triggeredOnStart: false
    running: false
    onTriggered: dialog.destroy()
}

TestPopup.qml:

Popup {
    id: popup
    modal: true
    ...
    Button {
        text: "close"
        anchors.centerIn: parent
        onClicked: popup.close()
    }
}

[1]什么时候dialog.destroy(),极有可能发生异常。当[1]is时timer.start(),它偶尔会发生异常。

如何安全地销毁弹出窗口?

4

1 回答 1

0

堆栈跟踪看起来类似于QTBUG-59532。您可以尝试针对该问题应用修复程序,即https://codereview.qt-project.org/#/c/189581/(也可能是https://codereview.qt-project.org/#/c/189553/同样,如果您使用的是SwipeDelegate)。我没有看到SwipeDelegate那个痕迹,但尝试一下也无妨。

您可以尝试的另一件事是在 Linux 上使用 valgrind 运行您的应用程序,如此所述。

于 2017-03-28T10:42:50.593 回答