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