#include "wifidlg.h"
#include "ui_wifidlg.h"
#include <QFile>
#include <QDir>
#include <unistd.h>
#include <signal.h>
#include <QDebug>
#define WIFINUM 20
const QString wifiStrList = QString("/tmp/wifi.ini");
WifiDlg::WifiDlg(QWidget *parent) :
QDialog(parent),
ui(new Ui::WifiDlg)
{
ui->setupUi(this);
m_currItem = nullptr;
wifiListInit();
}
WifiDlg::~WifiDlg()
{
delete ui;
}
void WifiDlg::currItemClicked(QWidget *p)
{
if(m_currItem)
m_currItem->setConnectVisible(false);
m_currItem = (WifiItem*)p;
m_currItem->setConnectVisible(true);
}
void WifiDlg::wifiListInit()
{
system("sudo nmcli r wifi on");
system("sudo nmcli dev wifi > /tmp/wifi.ini");
usleep(10000);
QLayoutItem *child;
while ((child = ui->VLayout->takeAt(0)) != 0)
{
if(child->widget())
{
child->widget()->setParent(NULL);
}
delete child;
}
m_currItem = nullptr;
QFile file(wifiStrList);
if(!file.open(QIODevice::ReadOnly)){
qDebug()<<"No such file!";
return;
}
int curLine = 0;
QString line;
if(file.size()!=0)
{
QTextStream in(&file);
QString wifiFlag = "SSID"; //wifi名字符
QString modeFlag = "模式"; //wifi连接模式
line = in.readLine();
if(!line.isEmpty())
{
int wifiIndex = line.indexOf(wifiFlag); //文件对应的wifi名索引值
int modeIndex = line.indexOf(modeFlag);
while (!in.atEnd() ) {
line = in.readLine();
//qDebug() << line << line.length();
if(!line.contains("Mbit/s"))
continue;
QString tmpStr = line;
QString curConnection = line.left(1); //已连接wifi判断
QString wifiName = line.mid(wifiIndex,(modeIndex-wifiIndex)).simplified(); //获取wifi名称
int signalValue = tmpStr.split("Mbit/s").at(1).simplified().split(" ").at(0).toInt(); //获取wifi的信号强度
if(!wifiName.isEmpty())
{
WifiItem *item = new WifiItem(wifiName, signalValue);
connect(item, &WifiItem::itemClicked, this, &WifiDlg::currItemClicked);
if(curConnection == "*")
{
item->setConnect(true);
item->setConnectVisible(true);
m_currItem = item;
}
ui->VLayout->addWidget(item);
curLine++;
}
}
}
file.close();
}
}
void WifiDlg::on_btnRefresh_clicked()
{
wifiListInit();
}
void WifiDlg::on_btnClose_clicked()
{
this->accept();
}