Запустить программу из Qt

Я работаю с Qt в Linux. Мне нужно запустить программу чтения PDF-файлов "evince" из Qt.

Я искал, и, насколько я понимаю, я могу использовать Qprocess, чтобы заставить его работать. Что-то вроде этого:

QStringList args;
    args.append("/home/user/presentacion0.pdf");
    QProcess p(this);
    p.start("/usr/bin/evince", args, QIODevice::ReadWrite);
    p.waitForFinished();
    QString p_stdout = p.readAllStandardOutput();
    QString p_stderr = p.readAllStandardError();

Но я всегда получаю следующую ошибку:

Протокол не указан. Не удается разобрать аргументы: невозможно открыть дисплей:

Итак, я попробовал system(char *cmd) из stdlib.h и не работает system("/usr/bin/evince /home/user/presentacion0.pdf");

Я думаю, что system() не работает, потому что «evince» — это графическое приложение. Однако я могу без проблем запускать команды «ls», «mkdir» и т. д. с помощью system().

Пожалуйста, мне нужна помощь с этой темой.

Я очень ценю вашу помощь заранее.

Спасибо.


person Hermandroid    schedule 01.09.2012    source источник


Ответы (1)


Вы запускаете свое приложение Qt из приложения (скорее всего, из оболочки), в котором переменная окружения DISPLAY не установлена ​​должным образом (обычно это :0). QProcess использует среду вызывающего процесса.

Если вы на самом деле не заинтересованы в захвате evince stdout и stderr, и вам не нужно ждать его завершения, то я бы выбрал QProcess::startDetached().

person przemoc    schedule 01.09.2012