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
相关产品推荐
相关产品推荐

