Chinaunix首页 | 论坛 | 博客
  • 博客访问: 849134
  • 博文数量: 143
  • 博客积分: 455
  • 博客等级: 一等列兵
  • 技术积分: 861
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-03 00:11
文章分类

全部博文(143)

文章存档

2018年(10)

2017年(6)

2016年(28)

2015年(14)

2014年(67)

2013年(1)

2012年(17)

我的朋友

分类: 嵌入式

2012-09-13 16:00:22

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

 

运行界面如下:

运行:ipconfig

运行:ping

 

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

 

  1. //: main.cpp   
  2. #include "process.h"   
  3. #include    
  4. #include    
  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. }  
//: 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(); }  

  1. //: process.h   
  2. #ifndef PROCESS_H   
  3. #define PROCESS_H   
  4. #include    
  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  
//: 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  

  1. //: process.cpp   
  2. #include    
  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);  
  43. }  
阅读(1914) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~