Solve the problem of round corner in frosted glass effect

This commit is contained in:
chenlelin 2020-03-12 08:51:39 +08:00
parent 460122d671
commit 4d19e113ad
26 changed files with 1234 additions and 820 deletions

View File

@ -36,7 +36,15 @@ ConfForm::ConfForm(QWidget *parent) :
this->setWindowTitle(tr("edit network"));//"网络设置"
this->setAttribute(Qt::WA_TranslucentBackground);
//需要添加 void paintEvent(QPaintEvent *event) 函数
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
QPainterPath path;
auto rect = this->rect();
rect.adjust(0, 0, -0, -0);
path.addRoundedRect(rect, 6, 6);
setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
// this->setStyleSheet("QWidget{border-radius:6px;border:none;}");
ui->centralWidget->setStyleSheet("#centralWidget{border:1px solid rgba(255,255,255,0.05);border-radius:6px;background:rgba(19,19,20,0.9);}");
ui->lbName->setText(tr("Network name: "));//"网络名称:"
ui->lbTxt1->setText(tr("Method: "));//"编辑IP设置"

View File

@ -367,6 +367,8 @@ void KylinDBus::onNewConnection(QDBusObjectPath objPath)
void KylinDBus::onLanPropertyChanged(QVariantMap qvm)
{
if (!isRunningFunction) {
syslog(LOG_DEBUG, "kylin-nm receive a signal about interface 'Device.Wired' propertiesChanged.");
qDebug()<<"kylin-nm receive a signal about interface 'Device.Wired' propertiesChanged.";
isRunningFunction = true;
time->start(3000);

View File

@ -55,6 +55,7 @@ SOURCES += \
backthread.cpp \
onelancform.cpp \
loadingdiv.cpp \
utils.cpp \
wireless-security/dlgconnhidwifi.cpp \
wireless-security/dlgconnhidwifisecfast.cpp \
wireless-security/dlgconnhidwifisectunneltls.cpp \
@ -66,8 +67,7 @@ SOURCES += \
wireless-security/dlgconnhidwifileap.cpp \
wireless-security/dlgconnhidwifiwpa.cpp \
kylin-dbus-interface.cpp \
hot-spot/dlghotspotcreate.cpp \
networkspeed.cpp
hot-spot/dlghotspotcreate.cpp
HEADERS += \
mainwindow.h \
@ -78,6 +78,7 @@ HEADERS += \
backthread.h \
onelancform.h \
loadingdiv.h \
utils.h \
wireless-security/dlgconnhidwifi.h \
wireless-security/dlgconnhidwifisecfast.h \
wireless-security/dlgconnhidwifisectunneltls.h \
@ -90,8 +91,7 @@ HEADERS += \
wireless-security/dlgconnhidwifiwpa.h \
wireless-security/kylinheadfile.h \
kylin-dbus-interface.h \
hot-spot/dlghotspotcreate.h \
networkspeed.h
hot-spot/dlghotspotcreate.h
FORMS += \
mainwindow.ui \

View File

@ -34,14 +34,19 @@ MainWindow::MainWindow(QWidget *parent) :
checkSingle();
// 如果使用Qt::Popup 任务栏不显示且保留X事件如XCB_FOCUS_OUT, 但如果indicator点击鼠标右键触发XCB_FOCUS_OUT事件依然会失效
// 如果使用Qt::ToolTip, Qt::Tool + Qt::WindowStaysOnTopHint, Qt::X11BypassWindowManagerHint等flag则会导致X事件失效
// 如果使用Qt::Popup 任务栏不显示且保留X事件如XCB_FOCUS_OUT, 但如果indicator点击鼠标右键触发XCB_FOCUS_OUT事件依然会失效
// 如果使用Qt::ToolTip, Qt::Tool + Qt::WindowStaysOnTopHint, Qt::X11BypassWindowManagerHint等flag则会导致X事件失效
this->setWindowFlags(Qt::FramelessWindowHint | Qt::Popup);//QTool
// this->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint);
// this->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint);
//this->setWindowOpacity(0.7);
this->setAttribute(Qt::WA_TranslucentBackground);//设置窗口背景透明
//this->setStyleSheet("QWidget{border-top-left-radius:6px;border-top-right-radius:6px;}");
QPainterPath path;
auto rect = this->rect();
rect.adjust(0, 0, -0, -0);
path.addRoundedRect(rect, 6, 6);
setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
this->setStyleSheet("QWidget{border:none;border-radius:6px;}");
this->setStyleSheet("QToolTip{background:rgba(26,26,26,0.7);"
"font: 14px;"
@ -51,7 +56,7 @@ MainWindow::MainWindow(QWidget *parent) :
"padding: 0px 5px;"
"outline:none;}");
ui->centralWidget->setStyleSheet("#centralWidget{border:1px solid rgba(255,255,255,0.05);border-radius:6px;background:rgba(19,19,20,0.95);}");
ui->centralWidget->setStyleSheet("#centralWidget{border:1px solid rgba(255,255,255,0.05);border-radius:6px;background:rgba(19,19,20,0.9);}");
lname = "-1";
wname = "-1";
@ -61,6 +66,28 @@ MainWindow::MainWindow(QWidget *parent) :
currentActWifiSignalLv = -1;
count_loop = 0;
btnOffQss = "QLabel{min-width: 37px; min-height: 37px;max-width:37px; max-height: 37px;border-radius: 4px; background-color:rgba(255,255,255,0)}";
btnOnQss = "QLabel{min-width: 37px; min-height: 37px;max-width:37px; max-height: 37px;border-radius: 4px; background-color:rgba(61,107,229,1)}";
btnBgOffQss = "QLabel{min-width: 48px; min-height: 22px;max-width:48px; max-height: 22px;border-radius: 10px; background-color:rgba(255,255,255,0.2)}";
btnBgOnQss = "QLabel{min-width: 48px; min-height: 22px;max-width:48px; max-height: 22px;border-radius: 10px; background-color:rgba(61,107,229,1);}";
scrollBarQss = "QScrollBar:vertical{width:10px;background:rgba(48,48,51,1);border-radius:6px;}"
"QScrollBar::up-arrow:vertical{height:0px;}"
"QScrollBar::sub-line:vertical{border:0px solid;height:0px}"
"QScrollBar::sub-page:vertical{background:transparent;}"
"QScrollBar::handle:vertical{width:4px;background:rgba(72,72,76,1);border-radius:3px;}"
"QScrollBar::handle:vertical:hover{width:4px;background:rgba(97,97,102,1);border-radius:3px;}"
"QScrollBar::handle:vertical:pressed{width:4px;background:rgba(133,133,140,1);border-radius:3px;}"
"QScrollBar::add-page:vertical{background:transparent;}"
"QScrollBar::add-line:vertical{border:0px solid;height:0px}"
"QScrollBar::down-arrow:vertical{height:0px;}";
leftBtnQss = "QPushButton{border:0px;border-radius:4px;background-color:rgba(255,255,255,0.12);color:white;font-size:14px;}"
"QPushButton:Hover{border:0px solid rgba(255,255,255,0.2);border-radius:4px;background-color:rgba(255,255,255,0.2);}"
"QPushButton:Pressed{border-radius:4px;background-color:rgba(255,255,255,0.08);}";
funcBtnQss = "QPushButton{border:0px;border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(107,142,235,0.97);font-size:14px;}"
"QPushButton:Hover{border:0px;border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(151,175,241,0.97);font-size:14px;}"
"QPushButton:Pressed{border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(61,107,229,0.97);font-size:14px;}";
this->confForm = new ConfForm();
this->ksnm = new KSimpleNM();
@ -81,9 +108,7 @@ MainWindow::MainWindow(QWidget *parent) :
btnCreateNet->resize(57, 14);
btnCreateNet->move(365, 77 + 10);
btnCreateNet->setText(tr("Create Lan Net"));//"新建网络"
btnCreateNet->setStyleSheet("QPushButton{border:0px;border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(107,142,235,0.97);font-size:14px;}"
"QPushButton:Hover{border:0px;border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(151,175,241,0.97);font-size:14px;}"
"QPushButton:Pressed{border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(61,107,229,0.97);font-size:14px;}");
btnCreateNet->setStyleSheet(funcBtnQss);
btnCreateNet->setFocusPolicy(Qt::NoFocus);
btnCreateNet->show();
connect(btnCreateNet,SIGNAL(clicked()),this,SLOT(onBtnCreateNetClicked()));
@ -103,28 +128,31 @@ MainWindow::MainWindow(QWidget *parent) :
btnAddNet->resize(57, 14);
btnAddNet->move(365, 77 + 10);
btnAddNet->setText(tr("Add Hide Network"));//"加入网络"
btnAddNet->setStyleSheet("QPushButton{border:0px;border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(107,142,235,0.97);font-size:14px;}"
"QPushButton:Hover{border:0px;border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(151,175,241,0.97);font-size:14px;}"
"QPushButton:Pressed{border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(61,107,229,0.97);font-size:14px;}");
btnAddNet->setStyleSheet(funcBtnQss);
btnAddNet->setFocusPolicy(Qt::NoFocus);
btnAddNet->show();
connect(btnAddNet,SIGNAL(clicked()),this,SLOT(onBtnAddNetClicked()));
lbLoadDown = new QLabel(ui->centralWidget);
lbLoadDown->move(41 + 132, 57 + 32);
lbLoadDown->move(46 + 132, 57 + 32);
lbLoadDown->resize(65, 20);
lbLoadUp = new QLabel(ui->centralWidget);
lbLoadUp->move(41 + 217, 57 + 32);
lbLoadUp->resize(65, 20);
lbLoadDownImg = new QLabel(ui->centralWidget);
lbLoadDownImg->move(46 + 115, 57 + 35);
lbLoadDownImg->resize(16, 16);
lbLoadUp = new QLabel(ui->centralWidget);
lbLoadUp->move(46 + 217, 57 + 32);
lbLoadUp->resize(65, 20);
lbLoadUpImg = new QLabel(ui->centralWidget);
lbLoadUpImg->move(46 + 200, 57 + 35);
lbLoadUpImg->resize(16, 16);
lbLoadDownImg->setStyleSheet("QLabel{background-image:url(:/res/x/load-down.png);}");
lbLoadUpImg->setStyleSheet("QLabel{background-image:url(:/res/x/load-up.png);}");
lbNoItemImg = new QLabel(ui->centralWidget);
lbNoItemImg->resize(96, 96);
lbNoItemImg->move(this->width()/2 - 96/2 + 41/2, this->height()/2 - 10);
lbNoItemImg->setStyleSheet("QLabel{background-image:url(:/res/s/nonet.png);}");
lbNoItemImg->hide();
lbNoItemTip = new QLabel(ui->centralWidget);
lbNoItemTip->resize(200, 20);
lbNoItemTip->move(this->width()/2 - 200/2 + 41/2, this->height()/2 + 96);
lbNoItemTip->resize(220, 20);
lbNoItemTip->move(this->width()/2 - 200/2 + 41/2, this->height()/2);
lbNoItemTip->setStyleSheet("QLabel{border:none;background:transparent;font-size:14px;color:rgba(255,255,255,0.91);}");
lbNoItemTip->setText(tr("No usable network in the list"));//列表暂无可连接网络
lbNoItemTip->setAlignment(Qt::AlignCenter);
@ -147,11 +175,6 @@ MainWindow::MainWindow(QWidget *parent) :
lbLanList = new QLabel(lanListWidget);
lbWifiList = new QLabel(wifiListWidget);
btnOffQss = "QLabel{min-width: 37px; min-height: 37px;max-width:37px; max-height: 37px;border-radius: 4px; background-color:rgba(255,255,255,0)}";
btnOnQss = "QLabel{min-width: 37px; min-height: 37px;max-width:37px; max-height: 37px;border-radius: 4px; background-color:rgba(61,107,229,1)}";
btnBgOffQss = "QLabel{min-width: 48px; min-height: 22px;max-width:48px; max-height: 22px;border-radius: 10px; background-color:rgba(255,255,255,0.2)}";
btnBgOnQss = "QLabel{min-width: 48px; min-height: 22px;max-width:48px; max-height: 22px;border-radius: 10px; background-color:rgba(61,107,229,1);}";
ui->lbNetwork->setStyleSheet("QLabel{font-size:20px;color:rgba(255,255,255,0.97);}");
ui->lbNetwork->show();
@ -168,30 +191,12 @@ MainWindow::MainWindow(QWidget *parent) :
scrollAreal->setStyleSheet("QScrollArea{border:none;}");
scrollAreal->viewport()->setStyleSheet("background-color:transparent;");
scrollAreal->verticalScrollBar()->setStyleSheet("QScrollBar:vertical{width:10px;background:rgba(48,48,51,1);border-radius:6px;}"
"QScrollBar::up-arrow:vertical{height:0px;}"
"QScrollBar::sub-line:vertical{border:0px solid;height:0px}"
"QScrollBar::sub-page:vertical{background:transparent;}"
"QScrollBar::handle:vertical{width:4px;background:rgba(72,72,76,1);border-radius:3px;}"
"QScrollBar::handle:vertical:hover{width:4px;background:rgba(97,97,102,1);border-radius:3px;}"
"QScrollBar::handle:vertical:pressed{width:4px;background:rgba(133,133,140,1);border-radius:3px;}"
"QScrollBar::add-page:vertical{background:transparent;}"
"QScrollBar::add-line:vertical{border:0px solid;height:0px}"
"QScrollBar::down-arrow:vertical{height:0px;}");
scrollAreal->verticalScrollBar()->setStyleSheet(scrollBarQss);
scrollAreaw->setStyleSheet("QScrollArea{border:none;}");
scrollAreaw->viewport()->setStyleSheet("background-color:transparent;");
scrollAreaw->verticalScrollBar()->setStyleSheet("QScrollBar:vertical{width:10px;background:rgba(48,48,51,1);border-radius:6px;}"
"QScrollBar::up-arrow:vertical{height:0px;}"
"QScrollBar::sub-line:vertical{border:0px solid;height:0px}"
"QScrollBar::sub-page:vertical{background:transparent;}"
"QScrollBar::handle:vertical{width:4px;background:rgba(72,72,76,1);border-radius:3px;}"
"QScrollBar::handle:vertical:hover{width:4px;background:rgba(97,97,102,1);border-radius:3px;}"
"QScrollBar::handle:vertical:pressed{width:4px;background:rgba(133,133,140,1);border-radius:3px;}"
"QScrollBar::add-page:vertical{background:transparent;}"
"QScrollBar::add-line:vertical{border:0px solid;height:0px}"
"QScrollBar::down-arrow:vertical{height:0px;}");
scrollAreaw->verticalScrollBar()->setStyleSheet(scrollBarQss);
ui->btnNetList->setFocusPolicy(Qt::NoFocus);
QString txtEthernet(tr("Ethernet"));
@ -213,9 +218,7 @@ MainWindow::MainWindow(QWidget *parent) :
ui->lbBtnWifiBall->setStyleSheet("QLabel{min-width: 16px; min-height: 16px;max-width:16px; max-height: 16px;"
"border-radius: 8px; border:1px solid white;background:white;}");
ui->btnHotspot->setStyleSheet("QPushButton{border:0px;border-radius:4px;background-color:rgba(255,255,255,0.12);color:white;font-size:14px;}"
"QPushButton:Hover{border:0px solid rgba(255,255,255,0.2);border-radius:4px;background-color:rgba(255,255,255,0.2);}"
"QPushButton:Pressed{border-radius:4px;background-color:rgba(255,255,255,0.08);}");
ui->btnHotspot->setStyleSheet(leftBtnQss);
ui->btnHotspot->setFocusPolicy(Qt::NoFocus);
QString txtHotSpot(tr("HotSpot"));
ui->btnHotspot->setToolTip(txtHotSpot);
@ -225,9 +228,7 @@ MainWindow::MainWindow(QWidget *parent) :
ui->lbHotBG->hide();
ui->lbHotBG->setStyleSheet(btnOffQss);
ui->btnFlyMode->setStyleSheet("QPushButton{border:0px;border-radius:4px;background-color:rgba(255,255,255,0.12);color:white;font-size:14px;}"
"QPushButton:Hover{border:0px solid rgba(255,255,255,0.2);border-radius:4px;background-color:rgba(255,255,255,0.2);}"
"QPushButton:Pressed{border-radius:4px;background-color:rgba(255,255,255,0.08);}");
ui->btnFlyMode->setStyleSheet(leftBtnQss);
ui->btnFlyMode->setFocusPolicy(Qt::NoFocus);
QString txtFlyMode(tr("FlyMode"));
ui->btnFlyMode->setToolTip(txtFlyMode);
@ -237,9 +238,7 @@ MainWindow::MainWindow(QWidget *parent) :
ui->lbFlyBG->hide();
ui->lbFlyBG->setStyleSheet(btnOffQss);
ui->btnAdvConf->setStyleSheet("QPushButton{border:0px;border-radius:4px;background-color:rgba(255,255,255,0.12);color:white;font-size:14px;}"
"QPushButton:Hover{border:0px solid rgba(255,255,255,0.2);border-radius:4px;background-color:rgba(255,255,255,0.2);}"
"QPushButton:Pressed{border-radius:4px;background-color:rgba(255,255,255,0.08);}");
ui->btnAdvConf->setStyleSheet(leftBtnQss);
ui->btnAdvConf->setFocusPolicy(Qt::NoFocus);
QString txtAdvanced(tr("Advanced"));
ui->btnAdvConf->setToolTip(txtAdvanced);
@ -268,6 +267,9 @@ MainWindow::MainWindow(QWidget *parent) :
trayIcon->show();
connect(ui->btnNetList, &QPushButton::clicked, this, &MainWindow::onBtnNetListClicked);
auto app = static_cast<QApplication*>(QCoreApplication::instance());
app->setStyle(new CustomStyle());
}
MainWindow::~MainWindow()
@ -424,10 +426,10 @@ void MainWindow::handleIconClicked()
QRect availableGeometry = qApp->primaryScreen()->availableGeometry();
QRect screenGeometry = qApp->primaryScreen()->geometry();
qDebug()<<" ";
qDebug()<<"trayIcon:"<<trayIcon->geometry();
qDebug()<<"screenGeometry: "<<screenGeometry;
qDebug()<<"availableGeometry: "<<availableGeometry;
// qDebug()<<" ";
// qDebug()<<"trayIcon:"<<trayIcon->geometry();
// qDebug()<<"screenGeometry: "<<screenGeometry;
// qDebug()<<"availableGeometry: "<<availableGeometry;
if (screenGeometry.width() == availableGeometry.width() && screenGeometry.height() == availableGeometry.height()){
QDesktopWidget* desktopWidget = QApplication::desktop();
@ -437,11 +439,11 @@ void MainWindow::handleIconClicked()
QRect deskDupRect = desktopWidget->availableGeometry(1);//获取可用桌面大小
QRect screenDupRect = desktopWidget->screenGeometry(1);//获取设备屏幕大小
qDebug()<<" ";
qDebug()<<"deskMainRect: "<<deskMainRect;
qDebug()<<"screenMainRect: "<<screenMainRect;
qDebug()<<"deskDupRect: "<<deskDupRect;
qDebug()<<"screenDupRect: "<<screenDupRect;
// qDebug()<<" ";
// qDebug()<<"deskMainRect: "<<deskMainRect;
// qDebug()<<"screenMainRect: "<<screenMainRect;
// qDebug()<<"deskDupRect: "<<deskDupRect;
// qDebug()<<"screenDupRect: "<<screenDupRect;
int n = objKyDBus->getTaskbarPos("position");
int m = objKyDBus->getTaskbarHeight("height");
@ -457,14 +459,14 @@ void MainWindow::handleIconClicked()
if (screenGeometry.x() == 0){
this->move(screenGeometry.width() - availableGeometry.width() + m, screenMainRect.height() - this->height());//主屏在左侧
}else{
this->move(screenGeometry.width() - availableGeometry.width() + m, screenDupRect.height() - this->height());//主屏在右侧
this->move(screenGeometry.width() - availableGeometry.width() + m,screenDupRect.y() + screenDupRect.height() - this->height());//主屏在右侧
}
} else if (n == 3){
//任务栏在右侧
if (screenGeometry.x() == 0){
this->move(availableGeometry.x() + availableGeometry.width() - this->width() - m, screenDupRect.height() - this->height());//主屏在左侧
}else{
this->move(availableGeometry.x() + availableGeometry.width() - this->width() - m, screenMainRect.height() - this->height());//主屏在右侧
if (screenGeometry.x() == 0){//主屏在左侧
this->move(screenMainRect.width() + screenDupRect.width() - this->width() - m, screenDupRect.y() + screenDupRect.height() - this->height());
}else{//主屏在右侧
this->move(availableGeometry.x() + availableGeometry.width() - this->width() - m, screenMainRect.height() - this->height());
}
}
} else if(screenGeometry.width() == availableGeometry.width() ){
@ -687,7 +689,7 @@ void MainWindow::changeTimerState()
}
}
//由kylin-dbus-interface.cpp调用
//网线插拔处理,由kylin-dbus-interface.cpp调用
void MainWindow::onPhysicalCarrierChanged(bool flag)
{
is_stop_check_net_state = 1;
@ -941,9 +943,7 @@ void MainWindow::getLanListDone(QStringList slist)
btnCreateNet->resize(57, 14);
btnCreateNet->move(365, 77 + 10);
btnCreateNet->setText(tr("Create Lan Net"));//"新建网络"
btnCreateNet->setStyleSheet("QPushButton{border:0px;border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(107,142,235,0.97);font-size:14px;}"
"QPushButton:Hover{border:0px;border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(151,175,241,0.97);font-size:14px;}"
"QPushButton:Pressed{border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(61,107,229,0.97);font-size:14px;}");
btnCreateNet->setStyleSheet(funcBtnQss);
btnCreateNet->setFocusPolicy(Qt::NoFocus);
btnCreateNet->show();
connect(btnCreateNet,SIGNAL(clicked()),this,SLOT(onBtnCreateNetClicked()));
@ -953,9 +953,6 @@ void MainWindow::getLanListDone(QStringList slist)
scrollAreal->setWidget(lanListWidget);
scrollAreal->move(41, 178);
lbNoItemImg->hide();
lbNoItemTip->hide();
// 获取当前连接的lan name
QString actLanName = "--";
activecon *act = kylin_network_get_activecon_info();
@ -975,8 +972,11 @@ void MainWindow::getLanListDone(QStringList slist)
ccf->setIcon(false);
ccf->setConnedString(1, tr("Disconnected"));//"未连接"
ccf->isConnected = false;
ifLanConnected = false;
lbLoadDown->hide();
lbLoadUp->hide();
lbLoadDownImg->hide();
lbLoadUpImg->hide();
ccf->setTopItem(false);
}
ccf->setAct(true);
@ -1007,8 +1007,11 @@ void MainWindow::getLanListDone(QStringList slist)
ccf->setLanInfo(objKyDBus->dbusLanIpv4, objKyDBus->dbusLanIpv6, mwBandWidth, objKyDBus->dbusLanMac);
ccf->setConnedString(1, tr("Connected"));//"已连接"
ccf->isConnected = true;
ifLanConnected = true;
lbLoadDown->show();
lbLoadUp->show();
lbLoadDownImg->show();
lbLoadUpImg->show();
ccf->setTopItem(false);
currSelNetName = "";
syslog(LOG_DEBUG, "already insert an active lannet in the top of lan list");
@ -1035,9 +1038,16 @@ void MainWindow::getLanListDone(QStringList slist)
if (n >= 1){
OneLancForm *lastItem = itemList.at(n-1);
lastItem->setLine(false);
} else{
lbNoItemImg->show();
lbNoItemTip->show();
lbNoItemTip->hide();
} else {
if (!ifLanConnected){
lbNoItemTip->hide();
lbTopLanList->hide();
btnCreateNet->hide();
} else{
lbNoItemTip->show();
lbNoItemTip->setText(tr("No Other Wired Network Scheme"));
}
}
this->lanListWidget->show();
@ -1080,16 +1090,11 @@ void MainWindow::loadWifiListDone(QStringList slist)
btnAddNet->resize(57, 14);
btnAddNet->move(365, 77 + 10);
btnAddNet->setText(tr("Add Hide Network"));
btnAddNet->setStyleSheet("QPushButton{border:0px;border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(107,142,235,0.97);font-size:14px;}"
"QPushButton:Hover{border:0px;border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(151,175,241,0.97);font-size:14px;}"
"QPushButton:Pressed{border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(61,107,229,0.97);font-size:14px;}");
btnAddNet->setStyleSheet(funcBtnQss);
btnAddNet->setFocusPolicy(Qt::NoFocus);
btnAddNet->show();
connect(btnAddNet,SIGNAL(clicked()),this,SLOT(onBtnAddNetClicked()));
lbNoItemImg->hide();
lbNoItemTip->hide();
// 清空wifi列表
wifiListWidget = new QWidget(scrollAreaw);
wifiListWidget->resize(440, /*60 + */88);
@ -1116,8 +1121,11 @@ void MainWindow::loadWifiListDone(QStringList slist)
activeWifiSignalLv = 0;
ccf->setConnedString(1, tr("Disconnected"), "");//"未连接"
ccf->isConnected = false;
ifWLanConnected = false;
lbLoadDown->hide();
lbLoadUp->hide();
lbLoadDownImg->hide();
lbLoadUpImg->hide();
ccf->setTopItem(false);
}
ccf->setAct(true);
@ -1160,8 +1168,12 @@ void MainWindow::loadWifiListDone(QStringList slist)
ccf->setWifiInfo(wsecu, wsignal, objKyDBus->dbusWifiMac);
ccf->setConnedString(1, tr("Connected"), wsecu);//"已连接"
ccf->isConnected = true;
ifWLanConnected = true;
qDebug()<<"show load down and load up";
lbLoadDown->show();
lbLoadUp->show();
lbLoadDownImg->show();
lbLoadUpImg->show();
ccf->setTopItem(false);
currSelNetName = "";
@ -1195,9 +1207,16 @@ void MainWindow::loadWifiListDone(QStringList slist)
if (n >= 1){
OneConnForm *lastItem = itemList.at(n-1);
lastItem->setLine(false);
} else {
lbNoItemImg->show();
lbNoItemTip->show();
lbNoItemTip->hide();
}else{
if(ifWLanConnected){
lbNoItemTip->show();
lbNoItemTip->setText(tr("No Other Wireless Network Scheme"));
} else {
lbNoItemTip->hide();
lbTopWifiList->hide();
btnAddNet->hide();
}
}
this->lanListWidget->hide();
@ -1354,6 +1373,7 @@ void MainWindow::on_btnWifi_clicked()
// 网络开关关闭时点击Wifi开关时程序先打开有线开关
if(checkLanOn()){
if(checkWlOn()){
lbTopWifiList->hide();
btnAddNet->hide();
QThread *t = new QThread();
BackThread *bt = new BackThread();
@ -1368,9 +1388,8 @@ void MainWindow::on_btnWifi_clicked()
if (is_fly_mode_on == 0){
on_btnWifiList_clicked();
is_stop_check_net_state = 1;
lbTopWifiList->show();
btnAddNet->show();
lbNoItemImg->hide();
lbNoItemTip->hide();
QThread *t = new QThread();
BackThread *bt = new BackThread();
bt->moveToThread(t);
@ -1391,6 +1410,7 @@ void MainWindow::on_btnWifi_clicked()
on_btnWifiList_clicked();
is_stop_check_net_state = 1;
lbTopWifiList->show();
btnAddNet->show();
QThread *t = new QThread();
BackThread *bt = new BackThread();
@ -1406,6 +1426,7 @@ void MainWindow::on_btnWifi_clicked()
}
//this->startLoading();
} else {
lbTopWifiList->hide();
btnAddNet->hide();
QString txt(tr("please insert the wireless network adapter"));
QString cmd = "export LANG='en_US.UTF-8';export LANGUAGE='en_US';notify-send '" + txt + "' -t 3800";
@ -1433,8 +1454,9 @@ void MainWindow::onBtnNetListClicked(int flag)
lbLoadDown->hide();
lbLoadUp->hide();
lbLoadDownImg->hide();
lbLoadUpImg->hide();
lbNoItemImg->hide();
lbNoItemTip->hide();
ui->lbNetwork->setText(tr("Ethernet"));
@ -1491,16 +1513,11 @@ void MainWindow::onBtnNetListClicked(int flag)
btnCreateNet->resize(57, 14);
btnCreateNet->move(365, 77 + 10);
btnCreateNet->setText(tr("Create Lan Net"));//"新建网络"
btnCreateNet->setStyleSheet("QPushButton{border:0px;border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(107,142,235,0.97);font-size:14px;}"
"QPushButton:Hover{border:0px;border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(151,175,241,0.97);font-size:14px;}"
"QPushButton:Pressed{border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(61,107,229,0.97);font-size:14px;}");
btnCreateNet->setStyleSheet(funcBtnQss);
btnCreateNet->setFocusPolicy(Qt::NoFocus);
btnCreateNet->show();
connect(btnCreateNet,SIGNAL(clicked()),this,SLOT(onBtnCreateNetClicked()));
lbNoItemImg->show();
lbNoItemTip->show();
// 清空lan列表
lanListWidget = new QWidget(scrollAreal);
lanListWidget->resize(440, 60 + 108);
@ -1537,8 +1554,9 @@ void MainWindow::on_btnWifiList_clicked()
lbLoadDown->hide();
lbLoadUp->hide();
lbLoadDownImg->hide();
lbLoadUpImg->hide();
lbNoItemImg->hide();
lbNoItemTip->hide();
ui->lbNetwork->setText(tr("Wifi"));
@ -1547,6 +1565,7 @@ void MainWindow::on_btnWifiList_clicked()
ui->lbBtnWifiBall->show();
if(checkWlOn()){
lbTopWifiList->show();
btnAddNet->show();
this->startLoading();
this->ksnm->execGetWifiList();
@ -1560,19 +1579,15 @@ void MainWindow::on_btnWifiList_clicked()
lbTopWifiList->resize(260, 46);
lbTopWifiList->move(19, 60 + 10);
lbTopWifiList->setStyleSheet("QLabel{font-size:14px;color:rgba(255,255,255,0.97);}");
lbTopWifiList->show();
lbTopWifiList->hide();
btnAddNet = new QPushButton(topWifiListWidget);
btnAddNet->resize(57, 14);
btnAddNet->move(365, 77 + 10);
btnAddNet->setText(tr("Add Hide Network"));
btnAddNet->setStyleSheet("QPushButton{border:0px;border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(107,142,235,0.97);font-size:14px;}"
"QPushButton:Hover{border:0px;border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(151,175,241,0.97);font-size:14px;}"
"QPushButton:Pressed{border-radius:4px;background-color:rgba(255,255,255,0);color:rgba(61,107,229,0.97);font-size:14px;}");
btnAddNet->setStyleSheet(funcBtnQss);
btnAddNet->setFocusPolicy(Qt::NoFocus);
connect(btnAddNet,SIGNAL(clicked()),this,SLOT(onBtnAddNetClicked()));
btnAddNet->hide();
lbNoItemImg->show();
lbNoItemTip->show();
// 清空wifi列表
wifiListWidget = new QWidget(scrollAreaw);
@ -1637,8 +1652,8 @@ void MainWindow::on_setNetSpeed()
QString str_rcv = QString::number(delta_rcv/3) + "kb/s";
QString str_tx = QString::number(delta_tx/3) + "kb/s";
lbLoadUp->setText(str_rcv);
lbLoadDown->setText(str_tx);
lbLoadDown->setText(str_rcv);
lbLoadUp->setText(str_tx);
end_rcv_rates = start_rcv_rates;
end_tx_rates = start_tx_rates;
@ -1867,9 +1882,20 @@ void MainWindow::on_btnWifiList_pressed()
void MainWindow::oneLanFormSelected(QString lanName)
{
QList<OneLancForm *> topLanList = topLanListWidget->findChildren<OneLancForm *>();
QList<OneLancForm *> lanList = lanListWidget->findChildren<OneLancForm *>();
// 所有元素回到原位
// 顶部的item缩小
topLanListWidget->resize(435, 60 + 10 + 46);
lbTopLanList->move(19, 60 + 10);
btnCreateNet->move(365, 77 + 10);
scrollAreal->move(41, 178);
lbNoItemTip->move(this->width()/2 - 200/2 + 41/2, this->height()/2);
OneLancForm *ocf = topLanList.at(0);
ocf->setTopItem(false);
// 下方所有元素回到原位
for(int i = 0, j = 0;i < lanList.size(); i ++){
OneLancForm *ocf = lanList.at(i);
if(ocf->isActive == true){
@ -1928,7 +1954,8 @@ void MainWindow::oneLanFormSelected(QString lanName)
}
void MainWindow::oneTopLanFormSelected(QString lanName)
{
QList<OneLancForm *> lanList = topLanListWidget->findChildren<OneLancForm *>();
QList<OneLancForm *> topLanList = topLanListWidget->findChildren<OneLancForm *>();
QList<OneLancForm *> lanList = lanListWidget->findChildren<OneLancForm *>();
if (currSelNetName == lanName){
// 与上一次选中同一个网络框,缩小当前选项卡
@ -1936,25 +1963,29 @@ void MainWindow::oneTopLanFormSelected(QString lanName)
lbTopLanList->move(19, 60 + 10);
btnCreateNet->move(365, 77 + 10);
scrollAreal->move(41, 178);
lbNoItemTip->move(this->width()/2 - 200/2 + 41/2, this->height()/2);
lbNoItemImg->move(this->width()/2 - 96/2 + 41/2, this->height()/2 - 10);
lbNoItemTip->move(this->width()/2 - 200/2 + 41/2, this->height()/2 + 96);
OneLancForm *ocf = lanList.at(0);
OneLancForm *ocf = topLanList.at(0);
ocf->setTopItem(false);
currSelNetName = "";
} else {
// 没有与上一次选中同一个网络框,放大当前选项卡
for(int i = 0; i < lanList.size(); i ++){
// 所有元素缩小并回到原位
OneLancForm *ocf = lanList.at(i);
ocf->setSelected(false, false);
ocf->move(4, i*60);
}
topLanListWidget->resize(435, 60 + 108 + 10 + 46);
lbTopLanList->move(19, 60 + 108 + 10);
btnCreateNet->move(365, 77 + 10 + 108);
scrollAreal->move(41, 178 + 108);
lbNoItemTip->move(this->width()/2 - 200/2 + 41/2, this->height()/2 + 80);
lbNoItemImg->move(this->width()/2 - 96/2 + 41/2, this->height()/2 - 10 + 54);
lbNoItemTip->move(this->width()/2 - 200/2 + 41/2, this->height()/2 + 96 + 54);
OneLancForm *ocf = lanList.at(0);
OneLancForm *ocf = topLanList.at(0);
ocf->setTopItem(true);
currSelNetName = lanName;
@ -1963,9 +1994,20 @@ void MainWindow::oneTopLanFormSelected(QString lanName)
void MainWindow::oneWifiFormSelected(QString wifiName, int extendLength)
{
QList<OneConnForm *>topWifiList = topWifiListWidget->findChildren<OneConnForm *>();
QList<OneConnForm *> wifiList = wifiListWidget->findChildren<OneConnForm *>();
// 所有元素回到原位
// 顶部的item缩小
topWifiListWidget->resize(435, 60 + 10 + 46);
lbTopWifiList->move(19, 60 + 10);
btnAddNet->move(365, 77 + 10);
scrollAreaw->move(41, 178);
lbNoItemTip->move(this->width()/2 - 200/2 + 41/2, this->height()/2);
OneConnForm *ocf = topWifiList.at(0);
ocf->setTopItem(false);
// 下方所有元素回到原位
for(int i = 0, j = 0;i < wifiList.size(); i ++){
OneConnForm *ocf = wifiList.at(i);
if(ocf->isActive == true){
@ -2040,7 +2082,8 @@ void MainWindow::oneWifiFormSelected(QString wifiName, int extendLength)
}
void MainWindow::oneTopWifiFormSelected(QString wifiName, int extendLength)
{
QList<OneConnForm *> wifiList = topWifiListWidget->findChildren<OneConnForm *>();
QList<OneConnForm *>topWifiList = topWifiListWidget->findChildren<OneConnForm *>();
QList<OneConnForm *> wifiList = wifiListWidget->findChildren<OneConnForm *>();
if (currSelNetName == wifiName){
// 与上一次选中同一个网络框,缩小当前选项卡
@ -2048,25 +2091,29 @@ void MainWindow::oneTopWifiFormSelected(QString wifiName, int extendLength)
lbTopWifiList->move(19, 60 + 10);
btnAddNet->move(365, 77 + 10);
scrollAreaw->move(41, 178);
lbNoItemTip->move(this->width()/2 - 200/2 + 41/2, this->height()/2);
lbNoItemImg->move(this->width()/2 - 96/2 + 41/2, this->height()/2 - 10);
lbNoItemTip->move(this->width()/2 - 200/2 + 41/2, this->height()/2 + 96);
OneConnForm *ocf = wifiList.at(0);
OneConnForm *ocf = topWifiList.at(0);
ocf->setTopItem(false);
currSelNetName = "";
} else {
// 没有与上一次选中同一个网络框,放大当前选项卡
for(int i = 0;i < wifiList.size(); i ++){
// 所有元素回到原位
OneConnForm *ocf = wifiList.at(i);
ocf->setSelected(false, false);
ocf->move(4, i * 60);
}
topWifiListWidget->resize(435, 60 + 88 + 10 + 46);
lbTopWifiList->move(19, 60 + 88 + 10);
btnAddNet->move(365, 77 + 10 + 88);
scrollAreaw->move(41, 178 + 88);
lbNoItemTip->move(this->width()/2 - 200/2 + 41/2, this->height()/2 + 65);
lbNoItemImg->move(this->width()/2 - 96/2 + 41/2, this->height()/2 - 10 + 44);
lbNoItemTip->move(this->width()/2 - 200/2 + 41/2, this->height()/2 + 96 + 44);
OneConnForm *ocf = wifiList.at(0);
OneConnForm *ocf = topWifiList.at(0);
ocf->setTopItem(true);
currSelNetName = wifiName;
@ -2239,6 +2286,8 @@ void MainWindow::disWifiDone()
ocf->isConnected = false;
lbLoadDown->hide();
lbLoadUp->hide();
lbLoadDownImg->hide();
lbLoadUpImg->hide();
ocf->setTopItem(false);
disconnect(ocf, SIGNAL(selectedOneWifiForm(QString,int)), this, SLOT(oneTopWifiFormSelected(QString,int)));
}else{
@ -2262,8 +2311,6 @@ void MainWindow::disWifiDone()
syslog(LOG_DEBUG, "Already turn off the switch of wifi network");
this->stopLoading();
lbNoItemImg->show();
lbNoItemTip->show();
}
void MainWindow::keepDisWifiState()

View File

@ -44,6 +44,7 @@
#include <QVariant>
#include <QStandardPaths>
#include <QStringList>
#include <QToolTip>
#include <fcntl.h>
#include <sys/types.h>
@ -54,7 +55,7 @@
#include "ksimplenm.h"
#include "loadingdiv.h"
#include "networkspeed.h"
#include "utils.h"
#include "confform.h"
#include "kylin-dbus-interface.h"
#include "kylin-network-interface.h"
@ -150,11 +151,11 @@ private:
QWidget *wifiListWidget;
QWidget *optWifiWidget;
QLabel *lbLoadDown;
QLabel *lbLoadUp;
QLabel *lbLoadDown, *lbLoadDownImg, *lbLoadUp, *lbLoadUpImg;
QLabel *lbNoItemImg;
QLabel *lbNoItemTip;
bool ifLanConnected;
bool ifWLanConnected;
QScrollArea *scrollAreal, *scrollAreaw;
QLabel *lbTopLanList, *lbTopWifiList, *lbLanList, *lbWifiList;
@ -173,6 +174,7 @@ private:
QString lname, wname; // 以太网卡和无线网卡名称
QString btnOffQss, btnOnQss, btnBgOffQss, btnBgOnQss; // 主界面按钮底色
QString scrollBarQss, leftBtnQss, funcBtnQss;
QStringList oldLanSlist; //上一次获取Lan列表

View File

@ -1,76 +0,0 @@
/*
* Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/&gt;.
*
*/
#include "networkspeed.h"
#include <stdio.h>
NetworkSpeed::NetworkSpeed(QObject *parent) :QObject(parent){}
int NetworkSpeed::getCurrentDownloadRates(char *netname, long *save_rate, long *tx_rate)
{
FILE * net_dev_file; //文件指针
char buffer[1024]; //文件中的内容暂存在字符缓冲区里
//size_t bytes_read; //实际读取的内容大小
char * match; //用以保存所匹配字符串及之后的内容
int counter = 0;
//int i = 0;
char tmp_value[128];
if((NULL == netname)||(NULL == save_rate)||(NULL == tx_rate)){
printf("bad param\n");
return -1;
}
if ( (net_dev_file=fopen("/proc/net/dev", "r")) == NULL ){ //打开文件/pro/net/dev/,从中读取流量数据
printf("open file /proc/net/dev/ error!\n");
return -1;
}
memset(buffer,0,sizeof(buffer));
while(fgets(buffer,sizeof(buffer),net_dev_file) != NULL){
match = strstr(buffer,netname);
if(NULL == match){
//printf("no eth0 keyword to find!\n");
continue;
}else{
//printf("%s\n",buffer);
match = match + strlen(netname) + strlen(":"); //地址偏移到冒号
sscanf(match,"%ld ",save_rate);
memset(tmp_value,0,sizeof(tmp_value));
sscanf(match,"%s ",tmp_value);
match = match + strlen(tmp_value);
for(size_t i=0;i<strlen(buffer);i++){
if(0x20 == *match){
match ++;
} else{
if(8 == counter){
sscanf(match,"%ld ",tx_rate);
}
memset(tmp_value,0,sizeof(tmp_value));
sscanf(match,"%s ",tmp_value);
match = match + strlen(tmp_value);
counter ++;
}
}
//printf("%s save_rate:%ld tx_rate:%ld\n",netname,*save_rate,*tx_rate);
}
}
return 0; //返回成功
}

View File

@ -1,21 +0,0 @@
#ifndef NETWORKSPEED_H
#define NETWORKSPEED_H
#include <QObject>
#include <QDebug>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
class NetworkSpeed : public QObject
{
Q_OBJECT
public:
explicit NetworkSpeed(QObject *parent = nullptr);
int getCurrentDownloadRates(char *netname,long int * save_rate,long int * tx_rate); //获取当前的流量,参数为将获取到的流量保
};
#endif // NETWORKSPEED_H

View File

@ -99,6 +99,5 @@
<file>res/s/conning-a/6.png</file>
<file>res/s/conning-a/7.png</file>
<file>res/s/conning-a/8.png</file>
<file>res/s/nonet.png</file>
</qresource>
</RCC>

View File

@ -72,8 +72,8 @@ OneConnForm::OneConnForm(QWidget *parent, MainWindow *mainWindow, ConfForm *conf
ui->btnHideConn->setStyleSheet("QPushButton{border:0px;border-radius:4px;background-color:rgba(61,107,229,1);color:white;font-size:14px;}"
"QPushButton:Hover{border:0px solid rgba(255,255,255,0.2);border-radius:4px;background-color:rgba(107,142,235,1);}"
"QPushButton:Pressed{border-radius:4px;background-color:rgba(50,87,202,1);}");
ui->lbLoadDownImg->setStyleSheet("QLabel{background-image:url(:/res/x/load-down.png);}");
ui->lbLoadUpImg->setStyleSheet("QLabel{background-image:url(:/res/x/load-up.png);}");
// ui->lbLoadDownImg->setStyleSheet("QLabel{background-image:url(:/res/x/load-down.png);}");
// ui->lbLoadUpImg->setStyleSheet("QLabel{background-image:url(:/res/x/load-up.png);}");
ui->lbWaiting->setStyleSheet("QLabel{border:0px;border-radius:4px;background-color:rgba(61,107,229,1);}");
ui->lbWaitingIcon->setStyleSheet("QLabel{border:0px;background-color:transparent;}");
@ -229,8 +229,8 @@ void OneConnForm::setTopItem(bool isSelected){
ui->btnInfo->show();
if (isConnected){
ui->lbLoadUpImg->show();
ui->lbLoadDownImg->show();
ui->lbLoadUpImg->hide();
ui->lbLoadDownImg->hide();
if (this->isWaiting){
ui->btnDisConn->hide();

View File

@ -54,8 +54,8 @@ OneLancForm::OneLancForm(QWidget *parent, MainWindow *mainWindow, ConfForm *conf
ui->btnDisConn->setStyleSheet("QPushButton{border:0px;border-radius:4px;background-color:rgba(255,255,255,0.12);color:white;font-size:14px;}"
"QPushButton:Hover{border:0px solid rgba(255,255,255,0.2);border-radius:4px;background-color:rgba(255,255,255,0.2);}"
"QPushButton:Pressed{border-radius:4px;background-color:rgba(255,255,255,0.08);}");
ui->lbLoadDownImg->setStyleSheet("QLabel{background-image:url(:/res/x/load-down.png);}");
ui->lbLoadUpImg->setStyleSheet("QLabel{background-image:url(:/res/x/load-up.png);}");
// ui->lbLoadDownImg->setStyleSheet("QLabel{background-image:url(:/res/x/load-down.png);}");
// ui->lbLoadUpImg->setStyleSheet("QLabel{background-image:url(:/res/x/load-up.png);}");
ui->lbWaiting->setStyleSheet("QLabel{border:0px;border-radius:4px;background-color:rgba(61,107,229,1);}");
ui->lbWaitingIcon->setStyleSheet("QLabel{border:0px;background-color:transparent;}");
@ -199,8 +199,8 @@ void OneLancForm::setTopItem(bool isSelected)
this->isSelected = false;
}
if (isConnected){
ui->lbLoadUpImg->show();
ui->lbLoadDownImg->show();
ui->lbLoadUpImg->hide();
ui->lbLoadDownImg->hide();
ui->btnDisConn->show();
} else {
@ -392,4 +392,5 @@ void OneLancForm::stopWaiting(){
ui->lbWaitingIcon->hide();
mw->setTrayLoading(false);
mw->getActiveInfo();
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

202
utils.cpp Normal file
View File

@ -0,0 +1,202 @@
/*
* Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/&gt;.
*
*/
#include "utils.h"
#include <stdio.h>
NetworkSpeed::NetworkSpeed(QObject *parent) :QObject(parent){}
int NetworkSpeed::getCurrentDownloadRates(char *netname, long *save_rate, long *tx_rate)
{
FILE * net_dev_file; //文件指针
char buffer[1024]; //文件中的内容暂存在字符缓冲区里
//size_t bytes_read; //实际读取的内容大小
char * match; //用以保存所匹配字符串及之后的内容
int counter = 0;
//int i = 0;
char tmp_value[128];
if((NULL == netname)||(NULL == save_rate)||(NULL == tx_rate)){
printf("bad param\n");
return -1;
}
if ( (net_dev_file=fopen("/proc/net/dev", "r")) == NULL ){ //打开文件/pro/net/dev/,从中读取流量数据
printf("open file /proc/net/dev/ error!\n");
return -1;
}
memset(buffer,0,sizeof(buffer));
while(fgets(buffer,sizeof(buffer),net_dev_file) != NULL){
match = strstr(buffer,netname);
if(NULL == match){
//printf("no eth0 keyword to find!\n");
continue;
}else{
//printf("%s\n",buffer);
match = match + strlen(netname) + strlen(":"); //地址偏移到冒号
sscanf(match,"%ld ",save_rate);
memset(tmp_value,0,sizeof(tmp_value));
sscanf(match,"%s ",tmp_value);
match = match + strlen(tmp_value);
for(size_t i=0;i<strlen(buffer);i++){
if(0x20 == *match){
match ++;
} else{
if(8 == counter){
sscanf(match,"%ld ",tx_rate);
}
memset(tmp_value,0,sizeof(tmp_value));
sscanf(match,"%s ",tmp_value);
match = match + strlen(tmp_value);
counter ++;
}
}
//printf("%s save_rate:%ld tx_rate:%ld\n",netname,*save_rate,*tx_rate);
}
}
return 0; //返回成功
}
CustomStyle::CustomStyle(const QString &proxyStyleName, QObject *parent) : QProxyStyle (proxyStyleName)
{
}
void CustomStyle::drawComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const
{
return QProxyStyle::drawComplexControl(control, option, painter, widget);
}
void CustomStyle::drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
{
return QProxyStyle::drawControl(element, option, painter, widget);
}
void CustomStyle::drawItemPixmap(QPainter *painter, const QRect &rectangle, int alignment, const QPixmap &pixmap) const
{
return QProxyStyle::drawItemPixmap(painter, rectangle, alignment, pixmap);
}
void CustomStyle::drawItemText(QPainter *painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString &text, QPalette::ColorRole textRole) const
{
return QProxyStyle::drawItemText(painter, rectangle, alignment, palette, enabled, text, textRole);
}
void CustomStyle::drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
{
return QProxyStyle::drawPrimitive(element, option, painter, widget);
}
QPixmap CustomStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *option) const
{
return QProxyStyle::generatedIconPixmap(iconMode, pixmap, option);
}
QStyle::SubControl CustomStyle::hitTestComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, const QPoint &position, const QWidget *widget) const
{
return QProxyStyle::hitTestComplexControl(control, option, position, widget);
}
QRect CustomStyle::itemPixmapRect(const QRect &rectangle, int alignment, const QPixmap &pixmap) const
{
return QProxyStyle::itemPixmapRect(rectangle, alignment, pixmap);
}
QRect CustomStyle::itemTextRect(const QFontMetrics &metrics, const QRect &rectangle, int alignment, bool enabled, const QString &text) const
{
return QProxyStyle::itemTextRect(metrics, rectangle, alignment, enabled, text);
}
int CustomStyle::pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option, const QWidget *widget) const
{
return QProxyStyle::pixelMetric(metric, option, widget);
}
void CustomStyle::polish(QWidget *widget)
{
if (widget) {
if (widget->inherits("QTipLabel")){
widget->setAttribute(Qt::WA_TranslucentBackground);
QPainterPath path;
auto rect = widget->rect();
rect.adjust(0, 0, -0, -0);
path.addRoundedRect(rect, 6, 6);
widget->setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
}
}
return QProxyStyle::polish(widget);
}
void CustomStyle::polish(QApplication *application)
{
return QProxyStyle::polish(application);
}
void CustomStyle::polish(QPalette &palette)
{
return QProxyStyle::polish(palette);
}
void CustomStyle::unpolish(QWidget *widget)
{
return QProxyStyle::unpolish(widget);
}
void CustomStyle::unpolish(QApplication *application)
{
return QProxyStyle::unpolish(application);
}
QSize CustomStyle::sizeFromContents(QStyle::ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget) const
{
return QProxyStyle::sizeFromContents(type, option, contentsSize, widget);
}
QIcon CustomStyle::standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const
{
return QProxyStyle::standardIcon(standardIcon, option, widget);
}
QPalette CustomStyle::standardPalette() const
{
return QProxyStyle::standardPalette();
}
int CustomStyle::styleHint(QStyle::StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const
{
return QProxyStyle::styleHint(hint, option, widget, returnData);
}
QRect CustomStyle::subControlRect(QStyle::ComplexControl control, const QStyleOptionComplex *option, QStyle::SubControl subControl, const QWidget *widget) const
{
return QProxyStyle::subControlRect(control, option, subControl, widget);
}
QRect CustomStyle::subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const
{
return QProxyStyle::subElementRect(element, option, widget);
}

160
utils.h Normal file
View File

@ -0,0 +1,160 @@
#ifndef UTILS_H
#define UTILS_H
#include <QObject>
#include <QDebug>
#include <QStyle>
#include <QProxyStyle>
#include <QStyleFactory>
#include <QWidget>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
class NetworkSpeed : public QObject
{
Q_OBJECT
public:
explicit NetworkSpeed(QObject *parent = nullptr);
int getCurrentDownloadRates(char *netname,long int * save_rate,long int * tx_rate); //获取当前的流量,参数为将获取到的流量保
};
/*!
* \brief The CustomStyle class
* \details
* QStyle
* QProxyStyle使QProxyStyle的实例绘制控件
* QProxyStyle可以从现有的qt style实例化style的名字即可
* style的代码直接引入我们的项目中
* style类进行二次开发
*
* QStyle的所有的接口使QStyle进行控件的绘制使得qt应用能够进行风格的切换
*
*
* \note
* QStyle与QSS并不兼容QSS本身其实上也是QStyle的一种实现
* QStyle进行绘制
*/
class CustomStyle : public QProxyStyle
{
Q_OBJECT
public:
explicit CustomStyle(const QString &proxyStyleName = "windows", QObject *parent = nullptr);
/*!
* \brief drawComplexControl
* \param control ScrollBarCC枚举类型
* \param option
* \param painter
* \param widget
* \details
* drawComplexControl用于绘制具有子控件的复杂控件
* QStyle的其它方法将复杂控件分解成子控件再调用其它的draw方法绘制
*
*
*
* 使
*
*
*/
virtual void drawComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr) const;
/*!
* \brief drawControl
* \param element CE枚举类型
* \param option
* \param painter
* \param widget
* \details
* drawControl用于绘制基本控件元素
* QStyle中的源码
*
*
* QStyle一般会遵循QCommonStyle的绘制流程QCommenStyle是大部分主流style的最基类
* 使
*
*/
virtual void drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const;
virtual void drawItemPixmap(QPainter *painter, const QRect &rectangle, int alignment, const QPixmap &pixmap) const;
virtual void drawItemText(QPainter *painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const;
/*!
* \brief drawPrimitive
* \param element PE枚举类型
* \param option
* \param painter
* \param widget
* \details
* drawPrimitive用于绘制控件背景
*
* hover和点击效果
*/
virtual void drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const;
virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *option) const;
virtual QStyle::SubControl hitTestComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, const QPoint &position, const QWidget *widget = nullptr) const;
virtual QRect itemPixmapRect(const QRect &rectangle, int alignment, const QPixmap &pixmap) const;
virtual QRect itemTextRect(const QFontMetrics &metrics, const QRect &rectangle, int alignment, bool enabled, const QString &text) const;
//virtual int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option, const QWidget *widget);
virtual int pixelMetric(QStyle::PixelMetric metric, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const;
/*!
* \brief polish
* \param widget
* \details
* polish用于对widget进行预处理polish中修改其属性
* polish是对动画和特效实现而言十分重要的一个方法
* polish我们能够使widget和特效和动画形成对应关系
*/
virtual void polish(QWidget *widget);
virtual void polish(QApplication *application);
virtual void polish(QPalette &palette);
virtual void unpolish(QWidget *widget);
virtual void unpolish(QApplication *application);
virtual QSize sizeFromContents(QStyle::ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget = nullptr) const;
virtual QIcon standardIcon(QStyle::StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const;
virtual QPalette standardPalette() const;
/*!
* \brief styleHint
* \param hint SH
* \param option
* \param widget
* \param returnData
* \return
* \details
* styleHint比较特殊QMenu是否可以滚动
*/
virtual int styleHint(QStyle::StyleHint hint, const QStyleOption *option = nullptr, const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const;
/*!
* \brief subControlRect
* \param control
* \param option
* \param subControl
* \param widget
* \return
* \details
* subControlRect返回子控件的位置和大小信息
*
*/
virtual QRect subControlRect(QStyle::ComplexControl control, const QStyleOptionComplex *option, QStyle::SubControl subControl, const QWidget *widget = nullptr) const;
/*!
* \brief subElementRect
* \param element
* \param option
* \param widget
* \return
* \details
* subControlRect类似
*/
virtual QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget = nullptr) const;
signals:
public slots:
};
#endif // UTILS_H

View File

@ -36,7 +36,14 @@ DlgConnHidWifi::DlgConnHidWifi(int type, MainWindow *mainWindow, QWidget *parent
this->setWindowFlags(Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
//需要添加 void paintEvent(QPaintEvent *event) 函数
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
QPainterPath path;
auto rect = this->rect();
rect.adjust(0, 0, -0, -0);
path.addRoundedRect(rect, 6, 6);
setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.9);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->setStyleSheet("QLabel{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->hide();

View File

@ -29,7 +29,14 @@ DlgConnHidWifiLeap::DlgConnHidWifiLeap(QWidget *parent) :
this->setWindowFlags(Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
//需要添加 void paintEvent(QPaintEvent *event) 函数
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
QPainterPath path;
auto rect = this->rect();
rect.adjust(0, 0, -0, -0);
path.addRoundedRect(rect, 6, 6);
setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.9);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->setStyleSheet("QLabel{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->hide();

View File

@ -31,7 +31,14 @@ DlgConnHidWifiSecFast::DlgConnHidWifiSecFast(int type, QWidget *parent) :
this->setWindowFlags(Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
//需要添加 void paintEvent(QPaintEvent *event) 函数
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
QPainterPath path;
auto rect = this->rect();
rect.adjust(0, 0, -0, -0);
path.addRoundedRect(rect, 6, 6);
setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.9);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->setStyleSheet("QLabel{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->hide();

View File

@ -31,7 +31,14 @@ DlgConnHidWifiSecLeap::DlgConnHidWifiSecLeap(int type, QWidget *parent) :
this->setWindowFlags(Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
//需要添加 void paintEvent(QPaintEvent *event) 函数
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
QPainterPath path;
auto rect = this->rect();
rect.adjust(0, 0, -0, -0);
path.addRoundedRect(rect, 6, 6);
setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.9);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->setStyleSheet("QLabel{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->hide();

View File

@ -31,7 +31,14 @@ DlgConnHidWifiSecPeap::DlgConnHidWifiSecPeap(int type, QWidget *parent) :
this->setWindowFlags(Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
//需要添加 void paintEvent(QPaintEvent *event) 函数
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
QPainterPath path;
auto rect = this->rect();
rect.adjust(0, 0, -0, -0);
path.addRoundedRect(rect, 6, 6);
setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.9);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->setStyleSheet("QLabel{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->hide();

View File

@ -31,7 +31,14 @@ DlgConnHidWifiSecPwd::DlgConnHidWifiSecPwd(int type, QWidget *parent) :
this->setWindowFlags(Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
//需要添加 void paintEvent(QPaintEvent *event) 函数
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
QPainterPath path;
auto rect = this->rect();
rect.adjust(0, 0, -0, -0);
path.addRoundedRect(rect, 6, 6);
setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.9);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->setStyleSheet("QLabel{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->hide();

View File

@ -30,7 +30,14 @@ DlgConnHidWifiSecTls::DlgConnHidWifiSecTls(int type, QWidget *parent) :
this->setWindowFlags(Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
//需要添加 void paintEvent(QPaintEvent *event) 函数
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
QPainterPath path;
auto rect = this->rect();
rect.adjust(0, 0, -0, -0);
path.addRoundedRect(rect, 6, 6);
setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.9);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->setStyleSheet("QLabel{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->hide();

View File

@ -31,7 +31,14 @@ DlgConnHidWifiSecTunnelTLS::DlgConnHidWifiSecTunnelTLS(int type, QWidget *parent
this->setWindowFlags(Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
//需要添加 void paintEvent(QPaintEvent *event) 函数
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
QPainterPath path;
auto rect = this->rect();
rect.adjust(0, 0, -0, -0);
path.addRoundedRect(rect, 6, 6);
setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.9);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->setStyleSheet("QLabel{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->hide();

View File

@ -30,7 +30,14 @@ DlgConnHidWifiWep::DlgConnHidWifiWep(int type, QWidget *parent) :
this->setWindowFlags(Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
//需要添加 void paintEvent(QPaintEvent *event) 函数
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
QPainterPath path;
auto rect = this->rect();
rect.adjust(0, 0, -0, -0);
path.addRoundedRect(rect, 6, 6);
setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.9);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->setStyleSheet("QLabel{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->hide();

View File

@ -35,6 +35,13 @@ DlgConnHidWifiWpa::DlgConnHidWifiWpa(int type, MainWindow *mainWindow, QWidget *
this->setWindowFlags(Qt::FramelessWindowHint);
this->setAttribute(Qt::WA_TranslucentBackground);
//需要添加 void paintEvent(QPaintEvent *event) 函数
QPainterPath path;
auto rect = this->rect();
rect.adjust(4, 4, -4, -4);
path.addRoundedRect(rect, 6, 6);
setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
this->setStyleSheet("QWidget{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");
ui->lbBoder->setStyleSheet("QLabel{border-radius:6px;background-color:rgba(19,19,20,0.95);border:1px solid rgba(255, 255, 255, 0.05);}");