我使用QPrintDialog初始化QPrinter对象,如下所示:
QPrinter printer;
QPrintDialog dlg(&printer);
if (dlg.exec() == QDialog::Accepted)
{
/* Are we printing to PDF? */
}
在Windows上,很容易检测输出是转到文件还是PDF编写器。在Mac上,没有相同的功能可以工作:
if ((printer.outputFormat() == QPrinter::PdfFormat)
|| (!printer.outputFileName().isEmpty()))
{
qDebug("PDF mode");
}
在线查看qprintdialog_mac.mm的副本,在函数QPrintDialogPrivate :: closeCarbonPrintPanel()中,Qt尝试检测输出是否重定向到文件。它将文件名存储在QMacPrintEnginePrivate的成员中。不知怎的,这个名字永远不会进入QPrinter对象。我不确定断开连接的位置。
那么.....我怎么知道打印输出是否真的要进入文件?如果这很容易的话,我愿意在这里找到特定的平台。我虽然没有Mac编程经验。
答案 0 :(得分:0)
这是Qt中的一个错误。
在Qt 5.3中,提供的示例代码将起作用,因为第二个条件是对QPrinter::outputFileName()
的调用。
答案 1 :(得分:0)
从Qt 5.14开始,即使在QPrintDialog中选择了“另存为PDF”,QPrinter的outputFileName属性仍然为空。
但是,当绘制到QPrinter对象时,正确的事情完成了。
以某种方式,QPrinter似乎以一种不透明的方式存储了对话框中的所有信息,而公共获取者无法访问该信息。
从mac打印对话框支持所有选项的正确方法似乎是:
QPrinter printer;
QPrintDialog dlg(&printer);
if (dlg.exec() == QDialog::Accepted)
{
QPainter painter;
painter.begin(&printer);
// do the painting
painter.end();
}
不幸的是,如果您想实现自己的打印逻辑,似乎不可能从QPrinter对象中提取信息。