Qt學習筆記4---網絡編程

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);
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章