Qt QGgraphicsView修复内存使用情况

时间:2016-03-18 13:16:16

标签: c++ qt

我使用QGraphicsView使用以下语句加载图像:

var rgx = /^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/;
console.log(rgx.test("99/12/2015"));

Sleft,Sright和scene3被声明为

if (QFile().exists(pl)){
    Sleft = new QGraphicsScene;
    Sleft->addPixmap(pl);
    ui->left->setScene(Sleft);
    ui->left->show();
    ui->left->update();
}
if (QFile().exists(pr) && (pr != "")){
    Sright = new QGraphicsScene;
    Sright->addPixmap(pr);
    ui->right->setScene(Sright);
    ui->right->show();
    ui->right->update();
}
else {
    scene3 = new QGraphicsScene;
    ui->right->setScene(scene3);
    ui->right->show();
}

我试图弄清楚为什么RAM使用量不断增加以及如何解决它。我想这可能与我每次调用方法时重新启用变量有关。

1 个答案:

答案 0 :(得分:0)

问题是每次加载图像时都会创建一个新的QGraphicsScene和一个新的像素图项,但是你不会销毁旧的场景和旧的像素图项。

每次加载图像时都没有必要创建新场景。您可以在启动时为每个QGraphicsScene创建并设置一个QGraphicsView

如果要加载新图像,可以使用QGraphicsScene::addPixmap并将返回的QGraphicsPixmapItem指针保存到类变量中。如果已加载图片,则必须先使用delete对其进行处理。

我建议您在C ++中了解有关内存分配的更多信息