QT实现ping命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT实现ping命令相关的知识,希望对你有一定的参考价值。
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QDebug>
#include <QProcess>
#include <QTextCodec>
#include <QRegExpValidator>
#include <QStringList>
#include <QString>
QT_BEGIN_NAMESPACE
namespace Ui class Widget;
QT_END_NAMESPACE
class Widget : public QWidget
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
public slots:
void Myping();
private:
Ui::Widget *ui;
;
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
ui->setupUi(this);
//使用正则表达式限制输入
ui->lineEdit_ip->setValidator(new QRegExpValidator(QRegExp("\\\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.)3(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\b")));
connect(ui->pushButton_ip,&QPushButton::clicked,this,&Widget::Myping);
/* bool Widget::Myping()
QProcess exc;
QTextCodec *codec = QTextCodec::codecForName("utf-8");
// QString cmdstr="ping 192.168.110.179";//ping 192.168.110.179 -n 2 -w 4000
QString cmdstr=ui->lineEdit_ip->text();
exc.start(cmdstr);//执行ping
exc.waitForFinished(-1);//等待ping完成
QString outstr=codec->toUnicode(exc.readAll());//获取ping结果
ui->textBrowser->setText(outstr);
//返回不等于-1,说明ping结果包含"往返行程的估计时间"字段,则说明ping成功,网络可达;等于-1,表示没有此字段,说明ping不通
if((outstr.indexOf("往返行程的估计时间"))!=-1)
qDebug("ping通\\n");
else
qDebug("ping失败\\n");
*/
void Widget::Myping()
qDebug()<<QStringLiteral("开始点击");
ui->textBrowser->clear();
ui->textBrowser->setText(QStringLiteral("请等待"));
ui->textBrowser->update();
QProcess myProcess(this);
QString program = "C:/Windows/System32/cmd.exe";
QStringList arguments;
QString ipaddr;
// 正则表达式限制输入
ipaddr = ui->lineEdit_ip->text();
//用户输入的内容
QString message = "ping " + ipaddr;
//和ping命令拼接,字符串的拼接直接+链接就可
qDebug()<<message;
//将拼接后的结果在应用程序输出的位置打印一下
// 用于占位
//arguments=ui->lineEdit_ip->setInputMask("000.000.000.000; ");
//arguments <<"/c" <<"ping www.baidu.com";
arguments <<"/c" <<message;
myProcess.start(program,arguments);
while (myProcess.waitForFinished(100) == false)
QByteArray qByteRead = myProcess.readAllStandardOutput();
if (!qByteRead.isEmpty())
ui->textBrowser->append(QString::fromLocal8Bit(qByteRead));
repaint();
QByteArray qByteRead = myProcess.readAllStandardOutput();
ui->textBrowser->append(QString::fromLocal8Bit(qByteRead));
qDebug()<<QString::fromLocal8Bit(qByteRead);
//输出应用程序输出上
qDebug()<<"结束点击";
Widget::~Widget()
delete ui;
以上是关于QT实现ping命令的主要内容,如果未能解决你的问题,请参考以下文章