我在ARM /嵌入式Linux平台上运行我的Qt(4.8,QWS服务器,QWidget应用程序)应用程序。在我的应用程序中,我有一个模块/小部件来查看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
。输出似乎与我使用manual命令运行时的输出相同。这是导入过程中文件的内容(未报告错误)。
"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""
感谢任何帮助。在此先感谢:)
答案 0 :(得分:0)
显然问题是该命令未在工作目录中被识别(仅在出于某种原因自动启动时)。当使用Qprocess
时,事实证明即使文件/命令存在于环境变量中也给出路径总是好的 - 就像我的情况一样($PATH
)。
我必须将QString
替换为:
QString PDFString = "/usr/local/bin//pdftocairo -jpeg -r 200 \"/media/usb/" + CacheName + ".pdf\" \"/opt/.pdf/" + CacheName + "\"";