问题描述
我在 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 (将#修改为@)