QPrinter中的错误处理

3
使用QTextDocument和QPrinter打印到PDF时,是否有任何检测错误的方法(例如无法写入PDF文件)? 我正在使用以下代码:
QTextDocument document;
QPrinter printer( QPrinter::HighResolution );
printer.setOutputFormat( QPrinter::PdfFormat );
printer.setOutputFileName( filename );
document.print( &printer );
2个回答

4
在文档中,您会找到QPrinter::printerState。因此,您肯定可以执行以下操作:
if (printer.printerState() == QPrinter::Error)
    // do some error handling

我承认这里的工作不多,因为只有4个QPrinter::PrinterState。你可能想尽力避免一开始就出现错误。文档中详细说明如下:
请注意,在无效的打印机上设置纸张大小和分辨率等参数是未定义的。在更改任何参数之前,您可以使用QPrinter::isValid()进行验证。
此外,您可以使用QFile :: exists检查您设置的文件名是否已经存在。在设置所有内容时,您可以调用和处理QPrinter :: supportedResolutions(), QPrinter :: supportedPaperSources()QPrinter :: supportsMultipleCopies()。当然,如果打印到PDF,您可能不必担心这些问题。

我尝试检查printerState,但似乎即使写入PDF失败,它也始终设置为闲置。 - Alan Birtles
嗯,没有看到代码的话很难说出问题出在哪里。你能提供一个最小可工作示例吗?可能立马更新打印机状态是没有意义的。我猜想实际的打印操作会在你的机器上的另一个线程中执行,而Qt可能只是等待收到返回结果。QPrinter只是使用你内置的打印机驱动程序(参见文档)。 - Basti Vagabond
就像这个链接所建议的那样,您可能希望在执行打印后不久触发定时事件,然后检查状态。 - Basti Vagabond
我现在尝试在打印后检查打印机状态,但它从未返回除空闲以外的任何内容。我想我必须采取一个不好的循环来检查输出文件是否已被修改。 - Alan Birtles

-1

看起来当文件名有效时,printerState会在写入文件失败时返回错误。如果文件名无效,则返回空闲状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接