• 14175阅读
  • 4回复

QProcess 调用cmd命令如何写参数? [复制链接]

上一主题 下一主题
离线a024014
 
只看楼主 倒序阅读 楼主  发表于: 2009-04-21
— 本帖被 XChinux 执行加亮操作(2009-04-22) —
我的QT版本是4.5的
我想用QProcess去启动一个命令行窗口,运行命令行中的一个命令,运行完后关闭进程
比如dir /?
我该怎么写呢?菜鸟求助

QProcess p;
QStringList slist;
slist<<" /c"<<"dir /?";
p.execute("c:\\windows\\system32\\cmd.exe" ,slist);
我是这样写的,但是在调用的时候发现进程一直没有结束,请问我是不是写错了?

在读取cmd的输出时,我先等待while(!proc->waitForFinished());
直到进程退出了,再读取预先由ready**信号触发的槽函数里已经读取出来的字符串。
请问这样有问题吗?

  1. proc = new QProcess;
  2.     connect(proc, SIGNAL(readyReadStandardOutput()), this, SLOT(readAllStdout()));
  3.     connect(proc, SIGNAL(readyReadStandardError()),this, SLOT(readAllStderr()));
  4.     proc->execute(str,arg);


  1. void HiProcess::readAllStdout()
  2. {
  3.     stdStr += proc->readAllStandardOutput().data();
  4. }
  5. void HiProcess::readAllStderr()
  6. {
  7.     errStr += proc->readAllStandardError().data();
  8. }
  9. QString HiProcess::readOutput()
  10. {
  11.     while(!proc->waitForFinished());
  12.     return QString(stdStr + errStr);
  13. }

离线XChinux

只看该作者 1楼 发表于: 2009-04-22
把该干的事情干完了自己在程序中把cmd.exe进程关掉。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线a024014
只看该作者 2楼 发表于: 2009-04-22
谢谢回复
问题已经解决了,问题出在execute方法上,我改成用start方法就OK了,呵呵!
还是谢啦~
离线zy_sunshine

只看该作者 3楼 发表于: 2009-12-18
扯淡,根本不能获得cmd的执行内容。换用start也是返回的空字符串。

  1. private:
  2.     void readAllStdout();
  3.     void readAllStderr();
  4.     QString readOutput();
  5.     QString stdStr;
  6.     QString errStr;
  7.     QProcess *proc;
  8. void MainWindow::readAllStdout()
  9. {
  10.     stdStr += proc->readAllStandardOutput().data();
  11. }
  12. void MainWindow::readAllStderr()
  13. {
  14.     errStr += proc->readAllStandardError().data();
  15. }
  16. QString MainWindow::readOutput()
  17. {
  18.     while(!proc->waitForFinished());
  19.     return QString(stdStr + errStr);
  20. }
  21. MainWindow::MainWindow()
  22. {
  23.     proc = new QProcess;
  24.     QStringList slist;
  25.     slist<<" /c"<<"dir /?";
  26.     proc->start("c:\\windows\\system32\\cmd.exe",slist);
  27.     readAllStdout();
  28.     readAllStderr();
  29.     QMessageBox::information(this, tr("info"),tr("%1").arg(readOutput()));
  30. }
离线toby520

只看该作者 4楼 发表于: 2011-10-17
如何在cmd中填写命令获取相关的信息呢?
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
快速回复
限100 字节
 
上一个 下一个