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

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

运行界面如下:

 

运行:ipconfig

 

 

运行:ping www.baidu.com

 

程序共包含以下有一个文件:

view plaincopy to clipboardprint?
//: main.cpp  
#include "process.h"  
#include <QApplication>  
#include <QTextCodec>  
int main(int argc, char *argv[])  
{  
    QApplication a(argc, argv);  
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());  
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());  
    Process w;  
    w.show();  
    return a.exec();  

//: main.cpp
#include "process.h"
#include <QApplication>
#include <QTextCodec>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
    Process w;
    w.show();
    return a.exec();
}
 

view plaincopy to clipboardprint?
//: process.h  
#ifndef PROCESS_H  
#define PROCESS_H  
#include <QWidget>  
class QLabel;  
class QLineEdit;  
class QProcess;  
class QPushButton;  
class QTextEdit;  
class Process : public QWidget  
{  
    Q_OBJECT  
public:  
    Process(QWidget *parent = 0, Qt::WFlags flags = 0);  
    ~Process();  
private slots:  
    void runClicked();  
    void readOutput();  
private:  
    QProcess* cmd;  
    QString output;  
    QLabel* inputLabel;  
    QLineEdit* inputEdit;  
    QPushButton* runButton;  
    QLabel* outputLabel;  
    QTextEdit* outputEdit;  
};  
#endif // PROCESS_H 
//: process.h
#ifndef PROCESS_H
#define PROCESS_H
#include <QWidget>
class QLabel;
class QLineEdit;
class QProcess;
class QPushButton;
class QTextEdit;
class Process : public QWidget
{
    Q_OBJECT
public:
    Process(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~Process();
private slots:
    void runClicked();
    void readOutput();
private:
    QProcess* cmd;
    QString output;
    QLabel* inputLabel;
    QLineEdit* inputEdit;
    QPushButton* runButton;
    QLabel* outputLabel;
    QTextEdit* outputEdit;
};
#endif // PROCESS_H
 

view plaincopy to clipboardprint?
//: process.cpp  
#include <QtGui>  
#include "process.h"  
Process::Process(QWidget *parent, Qt::WFlags flags)  
    : QWidget(parent, flags)  
{  
    inputLabel = new QLabel(tr("请输入命令:"));  
    inputEdit = new QLineEdit;  
    runButton = new QPushButton(tr("运行"));  
    outputLabel = new QLabel(tr("运行结果如下:"));  
    outputEdit = new QTextEdit;  
    outputEdit->setReadOnly(true);  
    QHBoxLayout* hlayout = new QHBoxLayout;  
    hlayout->addWidget(inputEdit);  
    hlayout->addWidget(runButton);  
    QVBoxLayout* layout = new QVBoxLayout;  
    layout->addWidget(inputLabel);  
    layout->addLayout(hlayout);  
    layout->addWidget(outputLabel);  
    layout->addWidget(outputEdit);  
    setLayout(layout);  
      
    cmd = new QProcess;  
    connect(inputEdit, SIGNAL(returnPressed()), this, SLOT(runClicked()));  
    connect(runButton, SIGNAL(clicked(bool)), this, SLOT(runClicked()));  
    connect(cmd, SIGNAL(readyRead()), this, SLOT(readOutput()));  
    resize(500, 300);  
}  
Process::~Process()  
{  
}  
void Process::runClicked()  
{  
    QString input = inputEdit->text();  
    cmd->start(input);  
    output = tr("");  
    outputEdit->setText(output);  
}  
void Process::readOutput()  
{  
    output += cmd->readAll();  
    outputEdit->setText(output);  



 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值