Qt|Linux工作笔记-异步调用ping命令,重定向获取信息,界面显示
生活随笔
收集整理的這篇文章主要介紹了
Qt|Linux工作笔记-异步调用ping命令,重定向获取信息,界面显示
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
邏輯:
1.使用QProcess在開線程前設置輸出文件【setStandardOutputFile】;
2.開一個線程,去專門調用shell命令,比如ping;
3.Qt讀取重定向文件,進行界面顯示;
?
程序運行截圖如下:
?
源碼如下:
widget.h
QT_BEGIN_NAMESPACE class 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_Hmain.cpp
clude <QApplication>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 <QProcess> #include <QEventLoop> #include <QTimer> #include <QDebug> #include <QFile>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"); }?
總結
以上是生活随笔為你收集整理的Qt|Linux工作笔记-异步调用ping命令,重定向获取信息,界面显示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs2013 qt5.1出现“无法找到源
- 下一篇: Linux学习笔记-对Makefile的