微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

QPrinter/QPainter 内存泄漏

如何解决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 举报,一经查实,本站将立刻删除。