QNetwork通过QNetworkAccessManager扫描Wi-Fi [英] Qt Scanning Wi-Fi by QNetworkAccessManager
本文介绍了QNetwork通过QNetworkAccessManager扫描Wi-Fi的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
欢迎,我在扫描Wi-Fi以获得Wi-Fi中的所有可用连接时遇到问题.到目前为止,我已经编写了以下代码:
#include< QCoreApplication>#include< QNetworkConfigurationManager>#include< QNetworkConfiguration>#include< QDebug>#include< QNetworkSession>int main(int argc,char * argv []){QCoreApplication a(argc,argv);QNetworkConfigurationManager ncm;QNetworkConfiguration cfg;QNetworkConfiguration :: StateFlags标志;int count = QNetworkConfiguration :: Active;qDebug()<<"Wi-Fi中的可用连接数量:"<<数数;qDebug()<<ncm.allConfigurations(flags = 0);返回a.exec();}
我在显示allConfigurations时遇到问题.我已阅读文档
.pro文件:
QT + =核心GUI网络大于(QT_MAJOR_VERSION,4):QT + =小部件目标= WiFi模板=应用来源+ = main.cpp \主窗口标题+ = mainwindow.h形式+ = mainwindow.ui
.cpp文件:
#include"mainwindow.h"#include"ui_mainwindow.h"MainWindow :: MainWindow(QWidget * parent):QMainWindow(父级),ui(新的Ui :: MainWindow){ui-> setupUi(this);findTimer =新的QTimer();findTimer-> setInterval(1000);connect(findTimer,& QTimer :: timeout,this,& MainWindow :: findActiveWirelesses);findTimer-> start();foundCount = 0;ui-> treeWidgetWiFis-> setColumnWidth(0,50);ui-> treeWidgetWiFis-> setColumnWidth(1,200);findActiveWirelesses();}MainWindow ::〜MainWindow(){删除ui;}无效MainWindow :: findActiveWirelesses(){QNetworkConfigurationManager ncm;netcfgList = ncm.allConfigurations();WiFisList.clear();用于(自动& x:netcfgList){如果(x.bearerType()== QNetworkConfiguration :: BearerWLAN){if(x.name()==")WiFisList<<未知(其他网络)";别的WiFisList<<x.name();qDebug()<<x.type();}}for(int i = 0; i< WiFisList.size(); i ++){布尔存在=假;QTreeWidgetItem * item =新的QTreeWidgetItem();for(int j = 0; j< ui-> treeWidgetWiFis-> topLevelItemCount(); j ++){QTreeWidgetItem * index = ui-> treeWidgetWiFis-> topLevelItem(j);QString str =索引->文本(1);if(str == WiFisList [i]){存在=真;休息;}}如果(!存在){item-> setTextAlignment(0,Qt :: AlignVCenter);item-> setTextAlignment(1,Qt :: AlignHCenter);item-> setText(0,QString :: number(++ foundCount));item-> setText(1,WiFisList [i]);ui-> treeWidgetWiFis-> addTopLevelItem(item);}}}
.h文件:
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include< QMainWindow>#include< QTimer>#include< QList>#include< QInputDialog>#include< QStandardItem>#include< QStandardItemModel>#include< QNetworkConfiguration>#include< QNetworkConfigurationManager>#include< QNetworkSession>命名空间Ui {类MainWindow;}类MainWindow:公共QMainWindow{Q_OBJECT上市:显式MainWindow(QWidget * parent = 0);〜MainWindow();int foundCount;QNetworkConfiguration netcfg;QStringList WiFisList;QList< QNetworkConfiguration>netcfgList;公共插槽:void findActiveWirelesses();私人的:Ui :: MainWindow * ui;QTimer * findTimer;QStandardItemModel * listModel;QNetworkSession *会话;};#endif//MAINWINDOW_H
Welcome I have a problem with scanning Wi-Fi to get all available connecting in Wi-Fi. I have writed so far this code:
#include <QCoreApplication>
#include <QNetworkConfigurationManager>
#include <QNetworkConfiguration>
#include <QDebug>
#include <QNetworkSession>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QNetworkConfigurationManager ncm;
QNetworkConfiguration cfg;
QNetworkConfiguration::StateFlags flags;
int count = QNetworkConfiguration::Active;
qDebug() << "Amount available connect in Wi-Fi :" << count;
qDebug() << ncm.allConfigurations(flags = 0);
return a.exec();
}
I have a problem with shows allConfigurations. I have read documentation Qt Network Configuration Manager but I do not know how to do that.
解决方案
Scanning Wi-Fi using QNetworkAccessManager.
I use QNetworkConfigurationManager class to get all WiFi s availables and show all of them into QTreeWidget.
QNetworkConfigurationManager ncm; netcfgList = ncm.allConfigurations();
.pro file:
QT += core gui network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = WiFi
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
.cpp file:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
findTimer = new QTimer();
findTimer->setInterval(1000);
connect(findTimer,&QTimer::timeout,this,&MainWindow::findActiveWirelesses);
findTimer->start();
foundCount = 0;
ui->treeWidgetWiFis->setColumnWidth(0,50);
ui->treeWidgetWiFis->setColumnWidth(1,200);
findActiveWirelesses();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::findActiveWirelesses()
{
QNetworkConfigurationManager ncm;
netcfgList = ncm.allConfigurations();
WiFisList.clear();
for (auto &x : netcfgList)
{
if (x.bearerType() == QNetworkConfiguration::BearerWLAN)
{
if(x.name() == "")
WiFisList << "Unknown(Other Network)";
else
WiFisList << x.name();
qDebug() << x.type();
}
}
for(int i=0; i<WiFisList.size(); i++)
{
bool exist = false;
QTreeWidgetItem * item = new QTreeWidgetItem();
for(int j=0; j<ui->treeWidgetWiFis->topLevelItemCount(); j++)
{
QTreeWidgetItem *index = ui->treeWidgetWiFis->topLevelItem(j);
QString str = index->text(1);
if(str == WiFisList[i])
{
exist = true;
break;
}
}
if(!exist)
{
item->setTextAlignment(0,Qt::AlignVCenter);
item->setTextAlignment(1,Qt::AlignHCenter);
item->setText(0,QString::number(++foundCount));
item->setText(1,WiFisList[i]);
ui->treeWidgetWiFis->addTopLevelItem(item);
}
}
}
.h file:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTimer>
#include <QList>
#include <QInputDialog>
#include <QStandardItem>
#include <QStandardItemModel>
#include <QNetworkConfiguration>
#include <QNetworkConfigurationManager>
#include <QNetworkSession>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
int foundCount;
QNetworkConfiguration netcfg;
QStringList WiFisList;
QList<QNetworkConfiguration> netcfgList;
public slots:
void findActiveWirelesses();
private:
Ui::MainWindow *ui;
QTimer *findTimer;
QStandardItemModel* listModel;
QNetworkSession *session;
};
#endif // MAINWINDOW_H
这篇关于QNetwork通过QNetworkAccessManager扫描Wi-Fi的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文