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

运行:ipconfig

运行:ping www.baidu.com

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

//: main.cpp   

#include "process.h"   

#include    

#include    

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();   

}  

//: process.h   

#ifndef PROCESS_H   

#define PROCESS_H   

#include    

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.cpp   

#include    

#include "process.h"   

Process::Process(QWidget *parent, Qt::WFlags flags = 0)   

     : 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);   

}


转载于:https://my.oschina.net/hemiya/blog/275128

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值