Qt如果要進行網絡編程首先要在.pro文件中添加如下代碼:
QT += network
在頭文件中包含相關頭文件:
#include <QHostInfo>
#include <QNetworkInterface>
例:
1、得到主機所有網絡地址,代碼如下:
widget.h文件:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QHostInfo>
#include <QNetworkInterface>
#include <QPushButton>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private:
QPushButton *btn1;
private slots:
void on_clicked();
};widget.cpp文件
#include "widget.h"
#include <QHBoxLayout>
#include <QMessageBox>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
btn1 = new QPushButton;
btn1->setText("確定");
QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(btn1);
connect(btn1,SIGNAL(clicked()),this,SLOT(on_clicked()));
}
Widget::~Widget()
{
}
void Widget::on_clicked()
{
QString s = QHostInfo::localHostName();
QHostInfo info = QHostInfo::fromName(s);
QList<QHostAddress> list = info.addresses();//得到主機所有的網絡地址
if(!list.isEmpty())
{
QList<QHostAddress>::iterator i;//設置一個迭代器
for(i=list.begin();i!=list.end();i++)//遍歷這個list
QMessageBox::information(this,tr("提示"),(*i).toString());
}
}運行後,點擊“確定”按鈕,則以對話框形式顯示主機的所有網絡地址。
2、得到本機詳細信息
其中響應槽的事件代碼如下,其餘不變:
void Widget::on_clicked()
{
QString detail="";
QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();//得到本機所有的網絡接口信息
QList<QNetworkInterface>::iterator i;//申明一個迭代器
for(i=list.begin();i!=list.end();i++)//遍歷迭代器
{
QNetworkInterface interface = *i;//申明一個類QNetworkInterface的對象等於迭代器的值
detail = tr("設備:")+interface.name()+"\n";//得到設備名稱
detail = detail+tr("硬件地址:")+interface.hardwareAddress()+"\n";//得到設備地址
QList<QNetworkAddressEntry> entryList = interface.addressEntries();
QList<QNetworkAddressEntry>::iterator j;
for(j = entryList.begin();j!=entryList.end();j++)//遍歷一個設備的地址
{
QNetworkAddressEntry entry = *j;
detail = detail+"\t"+tr("IP地址:")+entry.ip().toString()+"\n";
detail = detail+"\t"+tr("子網掩碼:")+entry.netmask().toString()+"\n";
detail = detail+"\t"+tr("廣播地址:")+entry.broadcast().toString()+"\n";
}
QMessageBox::information(this,tr("Detail"),detail);
}
}