Я использую QProcess::start
для запуска Qt Assistant
с моим файлом проекта пользовательской справки.Это работает нормально, пока я не загружу проект (не файл проекта справки) в мою программу.Программа генерирует изображения из определенных данных, используя пользовательскую библиотеку.Даже когда все процессы заканчиваются, и я вижу сгенерированные образы, и больше ничего не происходит, когда я пытаюсь запустить Qt Assistant, моя программа зависает в функции QProcess:start
при попытке запустить процесс.Код:
show()
функция (общедоступная):
if (!run())
return false;
QByteArray ba("setSource ");
ba.append("qthelp://insyn_help/doc/");
proc->write(ba + page.toLocal8Bit() + '\n');
return true;
run()
функция (частная):
if (!proc)
proc = new QProcess();
if (proc->state() == QProcess::Running)
return true;
QString app = QString(QT_BIN_DIR) + QDir::separator() + QString("assistant");
QString path = QString(PREFIX) + QString(HELP_INSTALL_PATH) + QString("/help_project.qhc");
QStringList args;
args << QLatin1String("-collectionFile")
<< QLatin1String(path.toLatin1())
<< QLatin1String("-enableRemoteControl");
QFileInfo help_project(path);
if (help_project.exists()) {
proc->start(app,args);
if (!proc->waitForStarted()) {
m_exitCode = 1;
emit closed();
return false;
}
}
Этот код является частьюAssistantLauncher
класс, который был зарегистрирован с использованием qmlRegisterType
и добавлен к main.qml
как элемент окна приложения.Моя программа нигде не касается этого (кроме вызова метода show()
).Это отдельный объект (за исключением того, что он является частью appWindow
).Вопрос в том, почему процесс не может запуститься только после того, как моя программа заработала?И почему QProcess::start
даже не имеет тайм-аута.
UPD: я переместил proc->start(app,args);
в дочерний процесс, который я получил с помощью fork (), и теперь моя программа зависает на pid_t child = fork().
Так что проблема в том, чтоновый процесс не может быть создан.