123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- #include "etNetworkTest.h"
- #include "ui_etNetworkTest.h"
- #include "CAppInfo.h"
- #include "logproc.h"
- #include <QScrollBar>
- #include <QHBoxLayout>
- #include <QLabel>
- #include <QProcess>
- #include <regex>
- #include "winsock2.h"
- #include "windows.h"
- #include "winsock.h"
- #include "iphlpapi.h"
- etNetworkTest::etNetworkTest(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::etNetworkTest)
- {
- ui->setupUi(this);
- setStyleSheet(g_appInfoPtr->m_sQssStr);
- bSpeedPass = false;
- bDelayPass = false;
- connect(this, &etNetworkTest::checkInfo, this, [&](QString speed, QString sTime) {
- if (!speed.isEmpty())
- {
- if (speed.toInt() > 5)
- {
- bSpeedPass = true;
- ui->tablewt_envTest->item(0, 0)->setText(QString::fromLocal8Bit("电脑当前下载速度"));
- ui->tablewt_envTest->item(0, 1)->setText(speed + "kb/s");
- QWidget *widget = new QWidget;
- QHBoxLayout *layout = new QHBoxLayout;
- widget->setLayout(layout);
- QLabel *icon = new QLabel;
- icon->setFixedSize(QSize(g_appInfoPtr->m_fRate * 12, g_appInfoPtr->m_fRate * 9));
- icon->setPixmap(QPixmap(":/images/icon-et-item-pass.png").scaled(g_appInfoPtr->m_fRate * 12, g_appInfoPtr->m_fRate * 9));
- layout->addWidget(icon);
- layout->addStretch();
- ui->tablewt_envTest->setCellWidget(0, 2, widget);
- }
- }
- if(!sTime.isEmpty())
- {
- if (sTime.toInt() < 500)
- {
- bDelayPass = true;
- }
- ui->tablewt_envTest->item(1, 0)->setText(QString::fromLocal8Bit("电脑当前网络延迟"));
- ui->tablewt_envTest->item(1, 1)->setText(sTime+"ms");
- QWidget *widget = new QWidget;
- QHBoxLayout *layout = new QHBoxLayout;
- widget->setLayout(layout);
- QLabel *icon = new QLabel;
- icon->setFixedSize(QSize(g_appInfoPtr->m_fRate * 12, g_appInfoPtr->m_fRate * 9));
- icon->setPixmap(QPixmap(":/images/icon-et-item-pass.png").scaled(g_appInfoPtr->m_fRate * 12, g_appInfoPtr->m_fRate * 9));
- layout->addWidget(icon);
- layout->addStretch();
- ui->tablewt_envTest->setCellWidget(1, 2, widget);
- }
- if (bSpeedPass && bDelayPass)
- {
- m_bIsRun = false;
- }
- });
- m_bIsRun = true;
- m_thread = std::thread(std::bind(&etNetworkTest::threadProc, this));
- }
- etNetworkTest::~etNetworkTest()
- {
- m_bIsRun = false;
- m_thread.join();
- delete ui;
- }
- void etNetworkTest::threadProc()
- {
- PMIB_IFTABLE m_pTable = NULL;
- DWORD m_dwAdapters = 0;
- ULONG uRetCode = GetIfTable(m_pTable, &m_dwAdapters, TRUE);
- if (uRetCode == ERROR_NOT_SUPPORTED)
- {
- return;
- }
- if (uRetCode == ERROR_INSUFFICIENT_BUFFER)
- {
- m_pTable = (PMIB_IFTABLE)new BYTE[65535]; //假设端口数不超过65535个
- }
- DWORD dwLastIn = 0; //上一秒钟的接收字节数
- DWORD dwLastOut = 0; //上一秒钟的发送字节数
- DWORD dwBandIn = 0; //下载速度
- DWORD dwBandOut = 0;
- while(m_bIsRun)
- {
- GetIfTable(m_pTable, &m_dwAdapters, TRUE);
- DWORD dwInOctets = 0;
- DWORD dwOutOctets = 0;
- //将所有端口的流量进行统计
- for (UINT i = 0; i < m_pTable->dwNumEntries; i++)
- {
- MIB_IFROW Row = m_pTable->table[i];
- dwInOctets += Row.dwInOctets;
- dwOutOctets += Row.dwOutOctets;
- }
- dwBandIn = dwInOctets - dwLastIn; //下载速度
- dwBandOut = dwOutOctets - dwLastOut; //上传速速
- if (dwLastIn <= 0)
- {
- dwBandIn = 0;
- }
- else
- {
- dwBandIn = dwBandIn / 1024; //b转换成kb
- }
- if (dwLastOut <= 0)
- {
- dwBandOut = 0;
- }
- else
- {
- dwBandOut = dwBandOut / 1024; //b转换成kb
- }
- dwLastIn = dwInOctets;
- dwLastOut = dwOutOctets;
- QProcess process;
- process.start("ping www.baidu.com -n 1");
- process.waitForFinished(-1); // will wait forever until finished
- QString sOutStr = QString::fromLocal8Bit(process.readAllStandardOutput().data());
-
- QString sFindStr = QString::fromLocal8Bit("平均 =");
- int nIndex = sOutStr.indexOf(sFindStr);
- if (nIndex < 0)
- {
- nIndex = sOutStr.indexOf(QString::fromLocal8Bit("Average ="));
- }
- QString sTimeNum = "";
- if (nIndex > 0)
- {
- QString sTime = sOutStr.mid(nIndex + sFindStr.length(), sOutStr.length() - nIndex);
- int nTimeIndex = sTime.indexOf("ms");
- sTimeNum = sTime.left(nTimeIndex);
- }
- emit checkInfo(QString::number(dwBandIn), sTimeNum);
- Sleep(1000);
- }
- }
- int etNetworkTest::setUI(const int nLeft, const int nTop, const int nWidth)
- {
- setGeometry(nLeft, nTop, nWidth, g_appInfoPtr->m_fRate*146);
- ui->tablewt_envTest->setGeometry(g_appInfoPtr->m_fRate*30, 0, width() - g_appInfoPtr->m_fRate*30*2, height());
- ui->tablewt_envTest->setEditTriggers(QAbstractItemView::NoEditTriggers);
- //整行选中的方式
- ui->tablewt_envTest->setSelectionBehavior(QAbstractItemView::SelectRows);
- //设置为只能选中一行
- ui->tablewt_envTest->setSelectionMode(QAbstractItemView::SingleSelection);
- //隐藏列表头
- ui->tablewt_envTest->verticalHeader()->setVisible(false);
- //隐藏边框
- ui->tablewt_envTest->setShowGrid(false);
- //表头不高亮显示
- ui->tablewt_envTest->horizontalHeader()->setHighlightSections(false);
- //设置行数
- ui->tablewt_envTest->setRowCount(2);
- //设置列数
- ui->tablewt_envTest->setColumnCount(3);
- ui->tablewt_envTest->setHorizontalScrollMode(QTableWidget::ScrollPerPixel);
- ui->tablewt_envTest->horizontalScrollBar()->setSingleStep(g_appInfoPtr->m_fRate*5);
- QStringList sHeadStr;
- sHeadStr << QString::fromLocal8Bit("检测项") <<
- QString::fromLocal8Bit("值") <<
- QString::fromLocal8Bit("状态");
- ui->tablewt_envTest->setHorizontalHeaderLabels(sHeadStr);
- ui->tablewt_envTest->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft | Qt::AlignVCenter);
- ui->tablewt_envTest->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
- ui->tablewt_envTest->verticalHeader()->setDefaultSectionSize(g_appInfoPtr->m_fRate*48);
- ui->tablewt_envTest->setColumnWidth(0, g_appInfoPtr->m_fRate*525);
- ui->tablewt_envTest->setColumnWidth(1, g_appInfoPtr->m_fRate*170);
- ui->tablewt_envTest->setColumnWidth(2, g_appInfoPtr->m_fRate*24);
- ui->tablewt_envTest->horizontalHeader()->setStretchLastSection(true);
-
- for(int i = 0; i < 2; i++)
- {
- ui->tablewt_envTest->setItem(i, 0, new QTableWidgetItem(QString::fromLocal8Bit("")));
- ui->tablewt_envTest->setItem(i, 1, new QTableWidgetItem(QString::fromLocal8Bit("")));
- /* QWidget *widget = new QWidget;
- QHBoxLayout *layout = new QHBoxLayout;
- widget->setLayout(layout);
- QLabel *icon = new QLabel;
- icon->setFixedSize(QSize(g_appInfoPtr->m_fRate*12, g_appInfoPtr->m_fRate*9));
- icon->setPixmap(QPixmap(":/images/icon-et-item-pass.png").scaled(g_appInfoPtr->m_fRate*12, g_appInfoPtr->m_fRate*9));
- layout->addWidget(icon);
- layout->addStretch();
- ui->tablewt_envTest->setCellWidget(i, 2, widget);*/
- }
- ui->tablewt_envTest->item(0, 0)->setText(QString::fromLocal8Bit("电脑当前下载速度"));
- ui->tablewt_envTest->item(1, 0)->setText(QString::fromLocal8Bit("电脑当前网络延迟"));
-
- return height();
- }
- int etNetworkTest::widgetHeight()
- {
- return height();
- }
- int etNetworkTest::getCheckStatus()
- {
- return (bSpeedPass && bDelayPass);
- }
|