QT 子窗口关闭后资源被释放,再次打开出错

2 篇文章 0 订阅

QT 子窗口关闭后资源被释放,再次打开出错

问题:菜单栏点击后弹出一个子窗口Dialog,在该窗口中配置参数传递给主窗口,确定好参数后子窗口自动关闭,再打开的时候资源就被释放掉了,再也打不开。

解决:打开之前,把被释放掉的资源重新初始化一次。经过尝试,被释放掉的应该是qvtkWidget和viewer的捆绑关系,也就是要初始化的内容。

下面代码是子窗口cpp,里面定义了一个qvtkWidget和PCLVisualizer捆绑来做pcl的点云显示,也就是要初始化的内容。

filterdialog.cpp

#include "filterdialog.h"
#include "ui_filterdialog.h"

filterdialog::filterdialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::filterdialog)
{
    ui->setupUi(this);
    filterviewer.reset(new pcl::visualization::PCLVisualizer ("filterviewer", false));
    ui->filter_qvtkWidget->SetRenderWindow (filterviewer->getRenderWindow());
    filterviewer->setupInteractor(ui->filter_qvtkWidget->GetInteractor(), ui->filter_qvtkWidget->GetRenderWindow());
    filterviewer->setBackgroundColor(0,0,0);
    ui->filter_qvtkWidget->update();
}

void filterdialog::initialization()
{
    filterviewer.reset(new pcl::visualization::PCLVisualizer ("filterviewer", false));
    ui->filter_qvtkWidget->SetRenderWindow (filterviewer->getRenderWindow());
    filterviewer->setupInteractor(ui->filter_qvtkWidget->GetInteractor(), ui->filter_qvtkWidget->GetRenderWindow());
    filterviewer->setBackgroundColor(0,0,0);//背景色
    ui->filter_qvtkWidget->update();
}

在filterdialog.h中定义了一个初始化的SLOT,当再次打开时,主窗口调用filterdialog的SLOT(initilization()。

filterdialog.h

public slots:
    void initialization();

下面是主窗口菜单栏在打开子窗口时的初始化函数
mainwindow.cpp

/**菜单栏**/
void MainWindow::MenubarAction(QAction *action)
{
    if(action == ui->actionOpen)
    {
        FileOpen();
    }else if(action == ui->actionHelp)
    {
        messagebox();
    }else if(action == ui->actionRender)
    {
        renderdialog->show();
    }else if(action == ui->actionFilter)
    {
        if(loaded == 0)
        {
            qDebug()<<"please load a .ply file before operate filter";
            return;
        }

        filterwindow->initialization();//自窗口被关闭时会被释放,需要重新初始化
        filterwindow->filterviewer->removePointCloud("filtercloud");
        filterwindow->filterviewer->addPointCloud<pcl::PointXYZRGB>(cloud, "filtercloud");
        filterwindow->filterviewer->resetCamera();
        filterwindow->ui->filter_qvtkWidget->update();

        filterwindow->exec();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值