我的表单中有一个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;
因此,这会导致双重删除。有人可以建议我如何解决这个问题吗?
尝试使用QObject::deleteLater而不是delete
。您正确地将父设置为null,这意味着您的对象不应该被默认的Qt机制删除,但它仍然可能被未被删除的信号/插槽连接调用。