• 8859阅读
  • 3回复

WinXP 下调用QProcess的问题[已解决] [复制链接]

上一主题 下一主题
离线taomic
 

只看楼主 倒序阅读 楼主  发表于: 2009-07-29
在windows XP 环境下用QProcess 调用应用程序,比如 "D:\Program Files\Thunder\Thunder.exe"
代码如下:
QString fn = "D:/Program Files/Thunder/Thunder.exe";
if(!QFile::exists(fn)){
        qDebug("not exists");
        return;
}  
process->start(fn);
if(!process->waitForStarted()){
        QProcess::ProcessError result = process->error();
       qDebug() << "ERROR" << result;
      return;
}

没有提示not exists,证实文件成功被找到,
但调用总是失败,打印出的错误为 FailedToStart
但是这样就可以成功调用:
QString fn = "Thunder.exe";
可执行文件放到D:\Program Files\Thunder 下


以前都是在Linux下用QT,没有遇到这个问题.请问这是什么原因啊
[ 此帖被taomic在2009-07-29 15:32重新编辑 ]
离线taomic

只看该作者 1楼 发表于: 2009-07-29
没人遇到过这种情况吗?
离线channon
只看该作者 2楼 发表于: 2009-07-29
因为目录里有空格
操作系统: Archlinux
Qt SDK: Qt 4.7.1 for Linux
开发方向: Qt,Java
常用数据库:Firebird、SQLite
离线taomic

只看该作者 3楼 发表于: 2009-07-29
谢谢2楼的回答
也可参照这个帖子
http://www.qtcn.org/bbs/read.php?tid=13806&fpage=0&toread=&page=1

原因: 路径中包含有空格
分析:
QProcess中的start函数有两个重载函数

(1)void QProcess::start( const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite )
        Warning : Windows: Arguments that contain spaces are wrapped in quotes.
        警告: 在Windows平台下,参数中包含有空格自动加入引号

    其中QStringList可以为空.
        所以这样是成功的:    QProcess::startDetached(fn,QStringList());

(2)void QProcess::start ( const QString & program, OpenMode mode = ReadWrite )
        Warning : on Windows, quotes need to be both escaped and quoted.
        警告: 在Windows平台下,参数中包含有空格时应加上转义符和引号
    所以这个必须自己加上了.

注:startDetached函数和这个同理,用法也相同
        
快速回复
限100 字节
 
上一个 下一个