Qt|Linux工作笔记-异步调用ping命令,重定向获取信息,界面显示
发布日期:2021-06-30 10:57:36 浏览次数:2 分类:技术文章

本文共 2604 字,大约阅读时间需要 8 分钟。

逻辑:

1.使用QProcess在开线程前设置输出文件【setStandardOutputFile】;

2.开一个线程,去专门调用shell命令,比如ping;

3.Qt读取重定向文件,进行界面显示;

 

程序运行截图如下:

 

源码如下:

widget.h

QT_BEGIN_NAMESPACEclass QProcess;class QTimer;QT_END_NAMESPACEnamespace Ui {class Widget;}class Widget : public QWidget{    Q_OBJECTpublic:    explicit Widget(QWidget *parent = 0);    ~Widget();    void removeExistFile(const QString fileName);    void getTopInformation(const QString cmd, const QString fileName);protected slots:    void readTopInfo();    void pingBtnClicked();private:    Ui::Widget *ui;    QProcess *m_process;    QTimer *m_readTime;    QString m_outputFileName;};#endif // WIDGET_H

main.cpp

clude 
int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; w.show(); return a.exec();}

widget.cpp

#include "widget.h"#include "ui_widget.h"#include 
#include
#include
#include
#include
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); m_outputFileName = "ping.txt"; removeExistFile(m_outputFileName); this->setWindowTitle("CSDN IT1995"); m_process = new QProcess; connect(ui->pushButton, SIGNAL(clicked(bool)), this, SLOT(pingBtnClicked()));}Widget::~Widget(){ delete ui;}void Widget::removeExistFile(const QString fileName){ if(QFile::exists(fileName)){ if(QFile::remove(fileName)){ qDebug() << fileName + " is discovered! remove successful"; } else{ qDebug() << fileName + " remove failed"; } return; } qDebug() << fileName + "is undiscovered!";}void Widget::getTopInformation(const QString cmd, const QString fileName){ m_process->setStandardOutputFile(fileName); m_process->start(cmd); QEventLoop loop; m_readTime = new QTimer; connect(m_readTime, SIGNAL(timeout()), this, SLOT(readTopInfo())); connect(m_process, SIGNAL(finished(int,QProcess::ExitStatus)), &loop, SLOT(quit())); m_readTime->start(500); loop.exec();}void Widget::readTopInfo(){ QFile file("ping.txt"); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){ qDebug() << "open failed!"; return; } QTextStream in(&file); QString pingFileInfo = in.readAll(); QStringList lineList = pingFileInfo.split("\n"); ui->listWidget->clear(); for(int i = 0; i < lineList.size(); i++){ ui->listWidget->insertItem(i, lineList[i]); }}void Widget::pingBtnClicked(){ QString ipOrUrl = ui->lineEdit->text(); QString cmd = "ping " + ipOrUrl; ui->pushButton->setEnabled(false); getTopInformation(cmd, "ping.txt");}

 

转载地址:https://it1995.blog.csdn.net/article/details/84067805 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Linux学习笔记-最基础的常用shell命令
下一篇:Linux工作笔记-解决spawn: not found与expect: not found问题(安装expect)

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月19日 21时39分32秒