【问题标题】:How can I check if QPdfWriter object can write to the specified file?如何检查 QPdfWriter 对象是否可以写入指定文件?
【发布时间】:2019-02-10 12:11:38
【问题描述】:

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

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

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

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

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

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 的文档。我找不到任何属性/方法来检查我是否可以写入文档...

那么问题 - 如何检查我是否可以写入文档?

【问题讨论】:

  • 你误会了什么。 new 将始终返回一个指向构造对象的有效指针,抛出异常。由于这是 Qt,它并没有真正使用异常,所以后一种情况可能已经过时了。 pdf 将是一个指向有效 QPdfWriter 实例的指针。所以你想问的是“我如何检查QPdfWrtier是否成功打开文件?”我确定文档说明了如何检查错误,但如果没有,请澄清您的问题,即检查是否存在错误的问题。
  • @hyde,感谢这个提示。是的,对象已创建,但没有产生错误或异常。我编辑了我的问题。
  • 您可以尝试使用此构造函数,因此您可以先使用 QFile 创建文件,然后检查是否正常:QPdfWriter::QPdfWriter(QIODevice *device)

标签: qt object exists


【解决方案1】:

我刚刚偶然发现了同样的问题,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...
}

【讨论】:

    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2011-02-28
    • 2018-03-12
    相关资源
    最近更新 更多