在QtContainer中的QStackedWidget中双重删除

问题描述 投票:0回答:1

我的表单中有一个QStackedWidget,我正在动态添加某些小部件。

    m_lineEdit = new QLineEdit();
    m_label = new QLabel();
    m_lineEdit->setText(name());
    m_label->setText(name());
    innerUi->stackedWidget->addWidget(m_lineEdit);
    innerUi->stackedWidget->addWidget(m_label);
    connect(m_lineEdit, &QLineEdit::editingFinished, [this]() {
        m_label->setText(m_lineEdit->text());
        innerUi->stackedWidget->setCurrentWidget(m_label);
    });
    innerUi->stackedWidget->setCurrentWidget(m_label);

当我使用它时,这很有效。但是当我关闭应用程序时崩溃了。

我试图调查这个问题,并观察了以下情况。 stackedwidget的父级存储在QVector中。有时我会动态删除QVector中的元素。

m_tasks.removeOne(task); 
mainUi->tasksLayout->removeWidget(task);
task->setParent(nullptr); 
mainUi->statusLabel->setText(getCompleteStatus());
delete task;

因此,这会导致双重删除。有人可以建议我如何解决这个问题吗?

c++ qt
1个回答
1
投票

尝试使用QObject::deleteLater而不是delete。您正确地将父设置为null,这意味着您的对象不应该被默认的Qt机制删除,但它仍然可能被未被删除的信号/插槽连接调用。

© www.soinside.com 2019 - 2024. All rights reserved.