使用 QT 中的参数启动 cmd open***-gui
Posted
技术标签:
【中文标题】使用 QT 中的参数启动 cmd open***-gui【英文标题】:Start cmd open***-gui with arguments in QT 【发布时间】:2016-11-23 16:11:17 【问题描述】:我有一个 QT 桌面应用程序,现在我希望它在启动时也自动调用 open*** 来启动。
第一次尝试我用一个简单的 system() 调用实现了它,它可以工作,但它会在屏幕上留下 cmd 窗口。我不喜欢它,但它有效:
system("open***-gui --connect m2smart.o***")
但现在我想直接启动而不需要 cmd 窗口,如果我不带参数执行它,它可以工作,这个:
QProcess open***;
QString cmd("open***-gui.exe");
open***.startDetached(cmd);
现在,我唯一需要的是指出要连接的 config.o***,就像在第一个示例中一样,我已经搜索了如何做到这一点,它似乎是这样的:
QProcess open***;
QString cmd("open***-gui.exe");
QStringList args;
args << "--connect m2smart.o***";
open***.startDetached(cmd, args);
但它显示了一个 open*** 窗口,上面写着:
“选项错误:无法识别的选项或缺少参数:--connect m2smart.o***”
但是,如果我打开一个 cmd 并输入“open***-gui --connect m2smart.o***”,它就可以工作,独立于我的工作目录。
所以...有人可以帮助我吗?我被这个困住了。
谢谢!
【问题讨论】:
你试过了吗:QProcess::startDetached("open***-gui --connect m2smart.o***")
?
@Mike 的工作就像一个魅力......谢谢队友,这么简单的答案,之前没有尝试过。但是我仍然在想为什么我一直在测试的东西不起作用......有什么想法吗?
【参考方案1】:
首先,QProcess::startDetached()
是一个静态方法。调用之前无需实例化QProcess
对象。你只需要这样做:
QProcess::startDetached("open***-gui.exe");
现在,QProcess::startDetached()
有两个重载:
QProcess::startDetached(const QString& command)
:
从启动程序的角度来看,这与使用system
函数没有区别。所以,在 Windows 上,如果你有类似的东西:
QProcess::startDetached("open***-gui.exe --connect m2smart.o***");
这与打开 cmd.exe
并输入 open***-gui.exe --connect m2smart.o***
相同。
QProcess::startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory = QString(), qint64 *pid = Q_NULLPTR)
:
来自docs:
在 Windows 上,参数被引用并加入到与
CommandLineToArgvW()
Windows 函数兼容的命令行中。
所以,如果你在你的程序中使用了这样的东西:
QString cmd("open***-gui.exe");
QStringList args;
args << "--connect m2smart.o***";
QProcess::startDetached(cmd, args);
这就像打开 cmd.exe
并输入 open***-gui.exe "--connect m2smart.o***"
。
在第一种情况下,传递给open***-gui.exe
的第一个参数是--connect
,第二个参数是m2smart.o***
。
在第二种情况下,只有一个参数是--connect m2smart.o***
。
【讨论】:
完美,这就是我需要的答案。谢谢你的伙伴!以上是关于使用 QT 中的参数启动 cmd open***-gui的主要内容,如果未能解决你的问题,请参考以下文章
Qt:无法使用 QProcess 启动 Windows 控制台