Qt - QProcess无法工作

4

我尝试启动Internet Explorer浏览器,所以我使用以下代码:

QProcess * process=new QProcess(this);
QString temp="C:\\Program Files\\Internet\ Explorer\\iexplore.exe";
process->startDetached(temp.toStdString().c_str());

但它不起作用。

2个回答

8

尝试:

QProcess * process=new QProcess(this);
QString temp="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\"";
process->startDetached(temp);

由于路径中有空格,您需要使用转义引号,或者可能需要转义所有空格(在您发布的代码中,您错过了 Program\ Files)。


2
比转义更容易的方法是使用 startDetached(temp, QStringList())。这个函数会自己处理转义。我总是喜欢使用接受 QStringList 参数的 QProcess::start/startDetached 等变体,以避免引号问题。 - Frank Osterfeld
1
@Frank:几乎一样,但问题在于程序名称包含空格而不是参数,所以仍然需要引用或转义路径。 - Adam W
不需要。如果您使用QStringList()重载,则无需引用。QProcess::startDetached(QLatin1String("/path/to/Foo Bar"), QStringList())可以正常工作,而QProcess::startDetached(QLatin1String("/path/to/Foo Bar"))会失败。在前一种情况下,没有理由将“Bar”解释为参数,因为参数是单独传递的。Qt会自动构建正确的命令行。 - Frank Osterfeld
@Frank:嗯,我以前从来没有用过这个,知道了就好。 - Adam W

1

这个怎么样?

QDir dir("C:\\");
QProcess::execute("explorer.exe", QStringList() << dir.toNativeSeparators(dir.path()));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接