Я использую QProcess::start
для запуска Qt Assistant
с моим пользовательским файлом проекта справки. Он отлично работает, пока я не загружу проект (не файл проекта помощи) в свою программу. Programm генерирует изображения из определенных данных, используя пользовательскую библиотеку. Даже когда все процессы завершаются, и я вижу сгенерированные изображения и больше ничего не происходит, когда я пытаюсь запустить 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().
Итак, проблема в том, что новый процесс не может быть создан.