首页 > 解决方案 > 如何检查 QPdfWriter 对象是否可以写入指定文件?

问题描述

我正在使用命令在 Qt 中创建 PDF 文档:

QPdfWriter *pdf;
pdf = new QPdfWriter(filename);

有时由于文件名错误或存在文档而未创建对象,并且在其他应用程序中打开...

如何检查是否创建了对象(如果 pdf 指针指向有效对象)?

编辑:我的错误是,没有创建该对象。这不是真的。QPdfWriter 对象已创建,但没有生成异常或错误。我可以设置一些属性。当我尝试向文档写入内容时,稍后会出现问题 - 请参阅最后 3 个命令的注释:

pdf->setParent(this);
pdf->setPageSize(QPdfWriter::A4);
pdf->setPageOrientation(QPageLayout::Orientation::Landscape);
QPainter *p = new QPainter(pdf); //got message: QPainter::begin(): Returned false
ui->chartView->render(p); // no error
p->end(); // got message: QPainter::end: Painter not active, aborted

我阅读了QpdfWriter和父类QPagedPaintDeviceQPaintDevice的文档。我找不到任何属性/方法来检查我是否可以写入文档...

所以问题 - 如何检查我是否可以写入文件?

标签: qtobjectexists

解决方案


我刚刚偶然发现了同样的问题,提示bool QFileInfo::isWritable() const并没有对我有用。尽管您基本上通过对倒数第三个命令的评论自己给出了答案,但您可以通过返回值QPainter::begin()检查是否QPdfWriter可以生成 pdf。

QPainter *p = new QPainter;
if (p->begin(pdf)) { 
    ui->chartView->render(p); 
    p->end();
} else {
    // error message...
}

推荐阅读