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
cludeint 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月19日 21时39分32秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
tf 从RNN到BERT
2019-04-30
tf keras SimpleRNN源码解析
2019-04-30
tf keras Dense源码解析
2019-04-30
tf rnn输入输出的维度和权重的维度
2019-04-30
检验是否服从同一分布
2019-04-30
tf callbacks
2019-04-30
keras、tf、numpy实现logloss对比
2019-04-30
【记】宝塔Linux怎么设置远程连接数据库
2019-04-30
【正文】进程与线程的综合概念与区别
2019-04-30
【正文】容器-Java的Collection和Iterator基本使用
2019-04-30
spring aop两种配置方式代码与说明
2019-04-30
【记】队列原理与Java数组实现队列
2019-04-30
【记】链表概念与Java链表实现
2019-04-30
《插入排序》的思想以及代码实现--排序算法(三)
2019-04-30
《希尔排序》的思想以及代码实现--排序算法(四)
2019-04-30
《归并排序》的思想以及代码实现--排序算法(六)
2019-04-30
散列(hash)算法与应用
2019-04-30
保存项目到Github(SSH)
2019-04-30
Hexo部署博客到Github
2019-04-30
Hexo部署博客到Gitee
2019-04-30