Запустите процесс, используя QProcess - PullRequest
4 голосов
/ 12 апреля 2010

Я пытаюсь запустить Microsoft Word, используя QProcess следующим образом:

QString program = "WINWORD.EXE";
process->start(program);

но ничего не происходит. winword.exe находится на пути (поэтому, когда я набираю слово winword.exe, открывается слово). Это правильный способ сделать это?

Ответы [ 6 ]

12 голосов
/ 12 апреля 2010

может быть код ниже поможет вам:

QProcess *process = new QProcess(this);
QString program = "explorer.exe";
QString folder = "C:\\";
process->start(program, QStringList() << folder);

Я думаю, что вы пытаетесь запустить программу, которая не состоит из глобальной переменной $ PATH windows, поэтому winword.exe не выполняется.

Также вам может потребоваться определить абсолютный путь к программе, например ::

QString wordPath = "C:\\Program Files\\Microsoft Office\\Office12\\WINWORD.EXE"
process->start(wordPath, QStringList() << "");
5 голосов
/ 18 февраля 2014

Для меня мне нужно добавить "символов:

`m_process->start("\"C:\\Program Files (x86)\\Notepad++\\notepad++.exe\"");`
1 голос
/ 12 апреля 2010

Из документации Qt:

Примечание: процессы запущены асинхронно, что означает сигналы start () и error () могут быть задерживается. Вызовите waitForStarted (), чтобы сделать уверен, что процесс начался (или имеет не удалось запустить) и эти сигналы были выпущены.

Подключите сигналы, упомянутые в документе, к некоторому управляющему или отладочному выходу графического интерфейса и посмотрите, что произойдет. Если есть ошибка, вы должны проверить тип ошибки, используя QProcess :: error ().

0 голосов
/ 21 сентября 2018
QProcess *pro = new QProcess;
QString s = "\"C:\Users\xyz\Desktop\Example.exe";
pro ->start(s);
0 голосов
/ 06 августа 2015

Вы можете просто установить рабочий каталог:

myProcess = new QProcess();
myProcess->setWorkingDirectory("C:\\Z-Programming_Source\\Java-workspace\\Encrypt1\\bin\\");

Или сделайте это при запуске:

myProcess->start("dir \"My Documents\"");

При запуске () вы можете ввести команду для консоли ... прочитайте инструкцию.

Я предпочитаю первый вариант. Более читабельно.

0 голосов
/ 20 августа 2013

Если метод, в котором вы пытаетесь запустить внешний процесс, завершается сразу после вашего кода, например ::

void foo() {
    ...
    QString program = "WINWORD.EXE";
    process->start(program);
}

и переменная

process

объявлен как локальная переменная, он будет уничтожен в конце метода, и внешний процесс не будет запущен - или вы его не увидите, потому что он будет уничтожен сразу после запуска.

Это была причина для подобной проблемы в моем случае. Надеюсь, это поможет.

...