【发布时间】:2017-10-02 05:01:33
【问题描述】:
我发现以下代码 sn-p 符合我的预期,但问题是,当 PDF 文件打开并且用户使用其他打印机从 PDF 阅读器打印 PDF 文件而不关闭 PDF 阅读器和再次从我的应用程序打印 PDF 文件,它将使用在 PDF 阅读器上配置的打印机而不是我设置为打印 PDF 文件的打印机打印。
例子:
- 在应用程序中,我将 Printer_1 设置为打印 PDF 文件。
- 打印文件(它将在 PDF 阅读器中打开文件并使用 Printer_1 打印机打印)。
- 在 PDF 阅读器上,我转到
CTRL + P进行打印,然后选择 Printer_2 并单击打印。 - 我没有关闭 PDF 阅读器,然后再次在应用程序上(打印机选择到 Printer_1),我打印了 PDF 文件。现在打印命令被发送到 Printer_2 而不是 Printer_1。
请问下面的代码sn-p有什么问题?
#include <QSettings>
#include <QProcess>
#include <QDebug>
int main(int argc, char *argv[])
{
const QString classesRoot = "HKEY_CLASSES_ROOT";
// get ID of .pdf extension
QSettings pdfSettings(classesRoot + "\\.pdf", QSettings::NativeFormat);
QString pdfId = pdfSettings.value("Default").toString();
// get path to default program that associated with PDF files
QString printPath = QSettings(classesRoot + "\\" + pdfId + "\\shell\\print\\command", QSettings::NativeFormat).value("Default").toString();
QString openPath = QSettings(classesRoot + "\\" + pdfId + "\\shell\\open\\command", QSettings::NativeFormat).value("Default").toString();
qDebug() << "print path" << printPath;
qDebug() << "open path" << openPath;
// open .pdf file
QProcess::startDetached(openPath.arg("full path to pdf file.pdf") );
// print .pdf file
QProcess printProcess;
printProcess.start(printPath.arg("full path to pdf file.pdf") );
printProcess.waitForFinished(-1);
return 0;
}
【问题讨论】:
标签: c++ qt pdf printing qsettings