Я использую свое приложение Qt (4.8, сервер QWS, приложение QWidget) на платформе ARM / linux. В моем приложении у меня есть модуль / виджет для просмотра файлов PDF.
Будучи более медленным процессором, было лучше пойти на преобразование файла PDF в файлы изображений, используя pdftocairo
, Модуль также имеет функцию импорта любого 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
получается, что всегда хорошо указывать путь, даже если файл / команда существует в переменных окружения — как было в моем случае ($PATH
).
Я должен был заменить QString
с:
QString PDFString = "/usr/local/bin//pdftocairo -jpeg -r 200 \"/media/usb/" + CacheName + ".pdf\" \"/opt/.pdf/" + CacheName + "\"";
Других решений пока нет …