Qt 實現主機資訊查詢
阿新 • • 發佈:2021-08-20
protocol() QAbstractSocket::NetworkLayerProtocol型別變數,表示當前IP地址的協議型別 型別如下:
QAbstractSocket::IPv4Protocol
QAbstractSocket::IPv6Protocol
QAbstractSocket::AnyIPProtocol
QAbstractSocket::UnknowNetworkLayerProtocol
toString() 返回IP地址的字串,表示程式中顯示了IP地址列表中每個IP地址的協議型別和IP地址字串
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QAbstractSocket>
#include <QHostInfo>
#include <QNetworkInterface>
#include <QHostAddress>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
void lookedUpHostInfo(const QHostInfo &info);
private:
Ui::MainWindow *ui;
QString protoclName(QAbstractSocket::NetworkLayerProtocol protocol);
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
//獲取主機資訊
QString hostname = QHostInfo::localHostName(); //本地主機名
ui->plainTextEdit->appendPlainText("本地主機名:"+hostname+"\n");
QHostInfo hostinfo = QHostInfo::fromName(hostname); //本機IP
QList<QHostAddress> addList = hostinfo.addresses();// IP地址列表
if(!addList.isEmpty())
{
for(int i =0;i<addList.count();i++)
{
QHostAddress aHost = addList.at(i);
bool show = ui->checkBox->isChecked(); //只顯示IPV4
if(show)
{
show = (QAbstractSocket::IPv4Protocol == aHost.protocol());
}else {
show = true;
}
if(show)
{
ui->plainTextEdit->appendPlainText("協議:"+protoclName(aHost.protocol()));
ui->plainTextEdit->appendPlainText("本機IP地址:"+aHost.toString());
ui->plainTextEdit->appendPlainText("");
}
}
}
}
void MainWindow::on_pushButton_2_clicked()
{
QList<QHostAddress> list = QNetworkInterface::allAddresses();
if(!list.isEmpty())
for(int i =0;i<list.count();i++)
{
QHostAddress aHost = list.at(i);
bool show = ui->checkBox->isChecked();
if(show)
show=QAbstractSocket::IPv4Protocol == aHost.protocol();
else
show =true;
if(show)
{
ui->plainTextEdit->appendPlainText("協議"+protoclName(aHost.protocol()));
ui->plainTextEdit->appendPlainText("IP地址"+aHost.toString());
ui->plainTextEdit->appendPlainText("");
}
}
}
void MainWindow::on_pushButton_3_clicked()
{
QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
for(int i=0;i<list.count();i++)
{
QNetworkInterface aInterface = list.at(i);
if(!aInterface.isValid())
{
continue;
}
ui->plainTextEdit->appendPlainText("裝置名稱"+aInterface.humanReadableName());
ui->plainTextEdit->appendPlainText("硬體地址"+aInterface.hardwareAddress());
QList<QNetworkAddressEntry> entry = aInterface.addressEntries();
for(int j = 0;j<entry.count();j++)
{
QNetworkAddressEntry aEntry = entry.at(j);
ui->plainTextEdit->appendPlainText("IP地址"+ aEntry.ip().toString());
ui->plainTextEdit->appendPlainText("子網掩碼"+ aEntry.netmask().toString());
ui->plainTextEdit->appendPlainText("廣播地址"+ aEntry.broadcast().toString() + "\n");
}
ui->plainTextEdit->appendPlainText("\n");
}
}
void MainWindow::on_pushButton_4_clicked()
{
QString hostname = ui->lineEdit->text(); //主機名
ui->plainTextEdit->appendPlainText("正在查詢主機資訊"+ hostname);
QHostInfo::lookupHost(hostname,this,SLOT(lookedUpHostInfo(QHostInfo)));
}
void MainWindow::on_pushButton_5_clicked()
{
ui->plainTextEdit->clear();
}
void MainWindow::lookedUpHostInfo(const QHostInfo & info)
{
QList<QHostAddress> addList = info.addresses();
if(!addList.isEmpty());
for(int i =0;i < addList.count(); i++)
{
QHostAddress aHost = addList.at(i);
bool show = ui->checkBox->isChecked();
if(show)
show = QAbstractSocket::IPv4Protocol ==aHost.protocol();
else
show = true;
if(show)
{
ui->plainTextEdit->appendPlainText("協議"+protoclName(aHost.protocol()));
ui->plainTextEdit->appendPlainText(aHost.toString());
}
}
}
//根據protocol()返回的QabstractSocket::NetworkLayerProtocol 列舉值顯示協議名稱字串
QString MainWindow::protoclName(QAbstractSocket::NetworkLayerProtocol protocol)
{
switch (protocol)
{
case QAbstractSocket::IPv4Protocol:
return "IPV4 Protocol";
case QAbstractSocket::IPv6Protocol:
return "IPV4 Protocol";
case QAbstractSocket::AnyIPProtocol:
return "IPV4 Protocol";
default:
return "Unknow Network Layer Protocol";
}
}