QT中调用外部程序:QProcess的使用

时间:2024-04-03 16:06:15

本文通过QProcess,实现了在Qt中调用外部程序(控制台程序),并将输出重定向到了一个QTextEdit里。效果如下图所示:

 

运行界面如下:

QT中调用外部程序:QProcess的使用

QT中调用外部程序:QProcess的使用

 

程序共包含以下三个文件:

 

  1. //: main.cpp  
  2. #include "process.h"  
  3. #include <QApplication>  
  4. #include <QTextCodec>  
  5. int main(int argc, char *argv[])  
  6. {  
  7.     QApplication a(argc, argv);  
  8.     QTextCodec::setCodecForTr(QTextCodec::codecForLocale());  
  9.     QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());  
  10.     Process w;  
  11.     w.show();  
  12.     return a.exec();  
  13. }  
 

  1. //: process.h  
  2. #ifndef PROCESS_H  
  3. #define PROCESS_H  
  4. #include <QWidget>  
  5. class QLabel;  
  6. class QLineEdit;  
  7. class QProcess;  
  8. class QPushButton;  
  9. class QTextEdit;  
  10. class Process : public QWidget  
  11. {  
  12.     Q_OBJECT  
  13. public:  
  14.     Process(QWidget *parent = 0, Qt::WFlags flags = 0);  
  15.     ~Process();  
  16. private slots:  
  17.     void runClicked();  
  18.     void readOutput();  
  19. private:  
  20.     QProcess* cmd;  
  21.     QString output;  
  22.     QLabel* inputLabel;  
  23.     QLineEdit* inputEdit;  
  24.     QPushButton* runButton;  
  25.     QLabel* outputLabel;  
  26.     QTextEdit* outputEdit;  
  27. };  
  28. #endif // PROCESS_H  
 
  1. //: process.cpp  
  2. #include <QtGui>  
  3. #include "process.h"  
  4. Process::Process(QWidget *parent, Qt::WFlags flags)  
  5.     : QWidget(parent, flags)  
  6. {  
  7.     inputLabel = new QLabel(tr("请输入命令:"));  
  8.     inputEdit = new QLineEdit;  
  9.     runButton = new QPushButton(tr("运行"));  
  10.     outputLabel = new QLabel(tr("运行结果如下:"));  
  11.     outputEdit = new QTextEdit;  
  12.     outputEdit->setReadOnly(true);  
  13.     QHBoxLayout* hlayout = new QHBoxLayout;  
  14.     hlayout->addWidget(inputEdit);  
  15.     hlayout->addWidget(runButton);  
  16.     QVBoxLayout* layout = new QVBoxLayout;  
  17.     layout->addWidget(inputLabel);  
  18.     layout->addLayout(hlayout);  
  19.     layout->addWidget(outputLabel);  
  20.     layout->addWidget(outputEdit);  
  21.     setLayout(layout);  
  22.       
  23.     cmd = new QProcess;  
  24.     connect(inputEdit, SIGNAL(returnPressed()), this, SLOT(runClicked()));  
  25.     connect(runButton, SIGNAL(clicked(bool)), this, SLOT(runClicked()));  
  26.     connect(cmd, SIGNAL(readyRead()), this, SLOT(readOutput()));  
  27.     resize(500, 300);  
  28. }  
  29. Process::~Process()  
  30. {  
  31. }  
  32. void Process::runClicked()  
  33. {  
  34.     QString input = inputEdit->text();  
  35.     cmd->start(input);  
  36.     output = tr("");  
  37.     outputEdit->setText(output);  
  38. }  
  39. void Process::readOutput()  
  40. {  
  41.     output += cmd->readAll();  
  42.     outputEdit->setText(output);