Qt - pdftocairo pdf 转换过程在应用程序自动启动时不起作用

Qt - pdftocairo pdf conversion process not working when application on auto start

我是 运行 我在 ARM/embedded linux 平台上的 Qt(4.8、QWS 服务器、QWidget 应用程序)应用程序。在我的应用程序中,我有一个 module/widget 来查看 PDF 文件。

作为较慢的处理器,最好使用 pdftocairo 将 PDF 文件转换为图像文件。该模块还具有从闪存驱动器导入任何 pdf 文件并使用 pdftocairo 将其转换为图像的功能。当我从命令行手动启动应用程序时,整个模块按预期工作。下面是将pdf文件以图片形式导入设备的代码:

QString CacheName = PDFList->currentItem()->text(); //name of PDF file without ".pdf"
QString PDFString = "pdftocairo -jpeg -r 200 \"/media/usb/" + CacheName + ".pdf\" \"/opt/.pdf/" + CacheName + "\"";
qDebug() << PDFString;
QProcess PDFCacheprocess;
PDFCacheprocess.startDetached(PDFString); //or PDFCacheprocess.start(PDFString)

该项目的最终目标是让应用程序在设备启动时自动启动。但是,当自动启动应用程序时,导入功能似乎没有任何作用。我对无法识别问题感到难过,因为我没有任何调试输出(正常执行应用程序时我确实有)。

我通常使用

手动执行应用程序
/opt/[path]/[application name] -qws

自动启动时,我将应用程序放入文件中,log.txt 添加 &>/opt/log.txt。输出好像和我手动命令运行时一样。这是导入过程中的文件内容(没有报错)。

"pdftocairo -jpeg -r 200 "/media/usb/manual.pdf" "/opt/.pdf/manual"

奇怪的是,所有其他命令(pdftocairo 除外)都在工作。我试图用 QString PDFString = "/opt/./importPDF.sh" 替换此命令。该脚本正在为任何命令(如 reboot)执行,但同样,如果它包含 pdftocairo 命令,它将失败。

我还尝试添加一个连接到 QProcess::finished(int) 的插槽以显示 QProcess 输出:

connect(&PDFCacheprocess, SIGNAL(finished(int)), this, SLOT(pdfImportStatus(int)));
void UserManual::pdfImportStatus(int)
{
    qDebug()<<PDFCacheprocess.errorString()<<'\t'<<PDFCacheprocess.exitCode();
}

对于手动执行(导入有效时),我会得到:

"pdftocairo -jpeg -r 200 "/media/usb/manual.pdf" "/opt/.pdf/manual""
"Unknown error"      0

对于自动启动,log.txt只显示这个(好像插槽没有被触发?) "pdftocairo -jpeg -r 200 "/media/usb/manual.pdf" "/opt/.pdf/manual""

感谢任何帮助。提前致谢:)

显然问题是在工作目录中无法识别该命令(仅当出于某种原因自动启动时)。当使用 Qprocess 时,事实证明,即使环境变量中存在 file/command,给出路径总是好的 - 正如我的情况 ($PATH).

我不得不将 QString 替换为:

QString PDFString = "/usr/local/bin//pdftocairo -jpeg -r 200 \"/media/usb/" + CacheName + ".pdf\" \"/opt/.pdf/" + CacheName + "\"";