You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt生成PDF报错QPaintDevice: Cannot destroy paint device that is being painted求助

Qt生成PDF时崩溃的问题解决

问题描述

我想要使用Qt生成PDF文件,以下是我的代码:

#include <QPdfWriter>
#include <QTextDocument>

int main() {
    QPdfWriter pdfWriter{R"(C:\TEMP\test.pdf)"};
    QTextDocument document;
    document.setPlainText("Hello world");
    document.print(&pdfWriter);
}

但在执行最后一行代码时程序崩溃,报错信息如下:

QPaintDevice: Cannot destroy paint device that is being painted

问题原因与解决方法

问题出在对象生命周期管理上:QPdfWriter对象pdfWriter是main函数的局部变量,document.print(&pdfWriter)执行过程中Qt内部仍在使用该对象,但函数执行结束后局部变量会被立即销毁,导致Qt尝试访问已销毁的绘图设备,触发崩溃。

只需确保QPdfWriter对象的生命周期覆盖整个打印过程即可修复,以下是两种可行方案:

方案1:动态分配对象

#include <QPdfWriter>
#include <QTextDocument>

int main() {
    QPdfWriter* pdfWriter = new QPdfWriter{R"(C:\TEMP\test.pdf)"};
    QTextDocument document;
    document.setPlainText("Hello world");
    document.print(pdfWriter);
    delete pdfWriter; // 打印完成后手动释放资源
}

方案2:明确作用域延长生命周期

#include <QPdfWriter>
#include <QTextDocument>

int main() {
    {
        QPdfWriter pdfWriter{R"(C:\TEMP\test.pdf)"};
        QTextDocument document;
        document.setPlainText("Hello world");
        document.print(&pdfWriter);
    } // 打印完成后再销毁pdfWriter
}

核心逻辑是保证QPdfWriter对象在print操作完全结束前不会被销毁。

内容的提问来源于stack exchange,提问作者nwp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:05:18