我正在使用我的自定义帮助项目文件QProcess::start
启动。Qt Assistant
在我将项目(不是帮助项目文件)加载到我的程序之前,它工作正常。Programm 使用自定义库从特定数据生成图像。即使所有进程都结束并且我看到生成的图像并且没有其他任何事情发生,当我尝试启动 Qt 助手时,我的程序在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().
所以问题是无法创建新进程。