Qt — процесс преобразования pdftocairo в pdf не работает при автоматическом запуске приложения

Я использую свое приложение 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""

Любая помощь приветствуется. Заранее спасибо 🙂

1

Решение

Видимо проблема была в том, что команда не распознавалась в рабочем каталоге (только при автоматическом запуске по какой-то причине). При использовании Qprocessполучается, что всегда хорошо указывать путь, даже если файл / команда существует в переменных окружения — как было в моем случае ($PATH).

Я должен был заменить QString с:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]