QPrinter/QPainter 内存泄漏

问题描述

我在 Qt 中打印时遇到内存管理问题。以下代码似乎存在内存泄漏。在调用 QPainter::drawImage 之后,QImage 似乎没有被清理(或者至少它在堆上留下了 500k 或更多的内存)。如果我注释掉对 QPainter::drawImage 的调用,我就不会出现内存泄漏。你能看出我在这里做错了什么吗?你能看到泄漏发生的地方吗?

bool doPrint()
{
    QPrinter printer;

    // select the printer
    printer.setPaperSize(QPagedPaintDevice::Letter);

    QSharedPointer<QPrintDialog> printDialog(new QPrintDialog(&printer,Q_NULLPTR));
    printDialog->setOption(QAbstractPrintDialog::PrintToFile);
    printDialog->setOption(QAbstractPrintDialog::PrintSelection);
    printDialog->setOption(QAbstractPrintDialog::PrintPageRange);
    printDialog->setOption(QAbstractPrintDialog::PrintCollateCopies);
    printDialog->setOption(QAbstractPrintDialog::PrintCurrentPage);
    printDialog->setFromTo(currentPage_ + 1,currentPage_ + 1);
    if (printDialog->exec() != QDialog::Accepted)
    {
        return false;
    }

    printer.setResolution(300);
    printer.setFullPage(false);

    QPainter painter;
    if (!painter.begin(&printer))
    {
        qWarning() << "Can't start printing...";
        return false;
    }

    for (int i=0; i<5; i++)
    {
        if (i != 0)
        {
            printer.newPage();
        }

        QImage image(300*8.5,300*11.0,QImage::Format_ARGB32);
        image.fill(qRgba(
                       QRandomGenerator::global()->bounded(255),QRandomGenerator::global()->bounded(255),255)
                   );
        if (!image.isNull())
        {
            painter.drawImage(0,image);
        }
    }

    painter.end();

    return true;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...