码迷,mamicode.com
首页 > 其他好文 > 详细

调用一个系统命令,并读取它的输出值(使用QProcess.readAll)

时间:2016-04-01 21:53:42      阅读:352      评论:0      收藏:0      [点我收藏+]

标签:

下面我们再看一个更复杂的例子,调用一个系统命令,这里我使用的是 Windows,因此需要调用 dir;如果你是在 Linux 进行编译,就需要改成 ls 了。

mainwindow.h

  1. #ifndef MAINWINDOW_H  
  2. #define MAINWINDOW_H  
  3.  
  4. #include <QtGui>  
  5.  
  6. class MainWindow : public QMainWindow  
  7. {  
  8.     Q_OBJECT  
  9.  
  10. public:  
  11.     MainWindow(QWidget *parent = 0);  
  12.     ~MainWindow();  
  13.  
  14. private slots:  
  15.     void openProcess();  
  16.     void readResult(int exitCode);  
  17.  
  18. private:  
  19.     QProcess *p;  
  20. };  
  21.  
  22. #endif // MAINWINDOW_H 

mainwindow.cpp

  1. #include "mainwindow.h"  
  2.  
  3. MainWindow::MainWindow(QWidget *parent)  
  4.     : QMainWindow(parent)  
  5. {  
  6.     p = new QProcess(this);  
  7.     QPushButton *bt = new QPushButton("execute notepad", this);  
  8.     connect(bt, SIGNAL(clicked()), this, SLOT(openProcess()));  
  9. }  
  10.  
  11. MainWindow::~MainWindow()  
  12. {  
  13.  
  14. }  
  15.  
  16. void MainWindow::openProcess()  
  17. {  
  18.     p->start("cmd.exe", QStringList() << "/c" << "dir");  
  19.     connect(p, SIGNAL(finished(int)), this, SLOT(readResult(int)));  
  20. }  
  21.  
  22. void MainWindow::readResult(int exitCode)  
  23. {  
  24.     if(exitCode == 0) {  
  25.         QTextCodec* gbkCodec = QTextCodec::codecForName("GBK");  
  26.         QString result = gbkCodec->toUnicode(p->readAll());  
  27.         QMessageBox::information(this, "dir", result);  
  28.     }  
  29. }  

我们仅增加了一个 slot 函数。在按钮点击的 slot 中,我们通过 QProcess::start() 函数运行了指令

cmd.exe /c dir

这里是说,打开系统的 cmd 程序,然后运行 dir 指令。如果有对参数 /c 有疑问,只好去查阅 Windows 的相关手册了哦,这已经不是 Qt 的问题了。然后我们 process 的 finished() 信号连接到新增加的 slot 上面。这个 signal 有一个参数 int。我们知道,对于 C/C++ 程序而言,main() 函数总是返回一个 int,也就是退出代码,用于指示程序是否正常退出。这里的 int 参数就是这个退出代码。在 slot 中,我们检查退出代码是否是0,一般而言,如果退出代码为0,说明是正常退出。然后把结果显示在 QMessageBox 中。怎么做到的呢?原来,QProcess::readAll() 函数可以读出程序输出内容。我们使用这个函数将所有的输出获取之后,由于它的返回结果是 QByteArray 类型,所以再转换成 QString 显示出来。另外注意一点,中文本 Windows 使用的是 GBK 编码,而 Qt 使用的是 Unicode 编码,因此需要做一下转换,否则是会出现乱码的,大家可以尝试一下。

好了,进程间交互就说这么说,通过查看文档你可以找到如何用 QProcess 实现进程过程的监听,或者是令Qt 程序等待这个进程结束后再继续执行的函数。

本文出自 “豆子空间” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/305116

调用一个系统命令,并读取它的输出值(使用QProcess.readAll)

标签:

原文地址:http://www.cnblogs.com/findumars/p/5346318.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!