qt界面跳转后回收资源的问题

今天在测试qt界面的时候遇到了问题打开任务管理器观察由此方法实现界面跳转在关闭界面之后资源无法回收资源

img


希望能得到一个简单的方法能实现当关闭新弹出的界面后回收资源

是的,你 new 了没有 delete, 最好是窗口设置为主窗口的成员变量, new 用上 this ,关闭父窗口资源会自动回收,或者你自己写 delete

关闭界面,用的close吗..
可参考:https://blog.csdn.net/qq_31565379/article/details/128687670

【以下回答由 GPT 生成】

问题需要在关闭Qt界面后回收资源。要确保在关闭新弹出的界面后正确回收资源,可以采取以下步骤:

  1. 使用QObject::deleteLater()方法来删除弹出的界面对象。这将在Qt事件循环的下一个周期中删除对象,确保对象被正确释放。
void Mainface::on_triggered_action_990()
{
    Duikangrelationship *a = new Duikangrelationship;
    connect(a, &Duikangrelationship::destroyed, this, &Mainface::onDialogClosed);
    a->show();
}

void Mainface::onDialogClosed(QObject *obj)
{
    obj->deleteLater();
}
  1. 为每个弹出的界面添加一个槽函数,当关闭按钮被点击时,调用deleteLater()方法删除界面对象。
void Duikangrelationship::on_closeButton_clicked()
{
    this->deleteLater();
}
  1. 添加一个关闭事件(QCloseEvent)的处理函数,确保在关闭界面时也能正确释放资源。
void Duikangrelationship::closeEvent(QCloseEvent *event)
{
    // 处理资源释放的操作
    // ...

    event->accept(); // 允许关闭界面
}
  1. 对于需要返回数据的界面跳转,可以使用Qt的QDialogQDialog::exec()方法。在关闭界面后,可以通过QDialog::result()方法获取结果值,然后进行相应的资源释放操作。
void Mainface::on_triggered_action_990()
{
    Duikangrelationship a;
    int result = a.exec();
    if (result == QDialog::Accepted) {
        // 处理返回结果
        // ...
    }
}

以上是解决问题的一般方法,但具体实施可能需要根据代码结构和需求进行调整和修改。希望这些步骤对您有帮助!如果您还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^