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


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

    运行界面如下:

    运行:ipconfig

    运行:ping www.baidu.com

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

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


  • 相关阅读:
    springcloud(九):熔断器Hystrix和Feign的应用案例
    springcloud(八):熔断器Hystrix
    springcloud(七): 使用Feign调用Eureka Server客户端服务
    springcloud(六):给Eureka Server服务器端添加用户认证
    springcloud(六):Eureka提供数据的客户端连接Docker的mysql
    Live Reload
    localStorage eval script
    javascript AOP
    如何设置让SFTP的用户限制在某个目录下
    整站下载器
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744781.html
Copyright © 2020-2023  润新知