void ProcessForker::_launch(const QString& command, const QString& workingDir, const QStringList& env) { for (const auto& var : env) { // Know Qt bug: QProcess::setProcessEnvironment() does not work with // startDetached(). Calling qputenv() directly as a workaround. const auto kv = var.split("="); if (kv.length() == 2 && !qputenv(kv[0].toLocal8Bit().constData(), kv[1].toLocal8Bit())) { print_log(LOG_ERROR, LOG_GENERAL, "Setting %s ENV variable failed.", var.toLocal8Bit().constData()); } } // forcefully disable touch point compression to ensure every touch point // update is received on the QML side (e.g. necessary for the whiteboard). // See undocumented QML_NO_TOUCH_COMPRESSION env variable in // <qt5-source>/qtdeclarative/src/quick/items/qquickwindow.cpp qputenv("QML_NO_TOUCH_COMPRESSION", "1"); auto process = new QProcess(); process->setWorkingDirectory(workingDir); process->startDetached(command); }
//virtual void COsProcess::Execute( bool detached ) //detached = false { if ( detached ) startDetached( mCmdLine.c_str() ); else start( mCmdLine.c_str() ); }
// static int KProcess::startDetached(const QStringList &argv) { QStringList args = argv; QString prog = args.takeFirst(); return startDetached(prog, args); }
bool Common::startDetached( const QString &program ) { return startDetached( program, QStringList() ); }