首页 > 其他分享 >QT实现wifi信号强弱图标

QT实现wifi信号强弱图标

时间:2024-07-09 13:58:49浏览次数:23  
标签:WifiIcon wifiStrength QT int void wifi break splitValue 图标

        Qt界面中绘制WiFi信号强弱图标。模拟类似手机的WIFI强度图标的绘制,比较简单,欢迎参考。

一、简述

        使用Qt实现WIFI信号图标。

二、效果 

 

三、核心代码  

 1、头文件
#ifndef WIFIICON_H
#define WIFIICON_H

#include <QWidget>

class WifiIcon : public QWidget
{
    Q_OBJECT
public:
    explicit WifiIcon(QWidget *parent = nullptr);

    //信号强度
    enum wifiStrength{
        Zero = 0,
        One,
        Two,
        Three,
        Four
    };

    //设置信号强度
    void setStrength(wifiStrength strength);

protected:
    void paintEvent(QPaintEvent *);
    void drawCircularArc(QPainter *painter, int radius, int startAngle, int angleLength, int arcHeight);

private:
    wifiStrength m_wifiStrength;
};

#endif // WIFIICON_H
2、cpp代码 
#include "wifiicon.h"
#include <QPainter>
#include <QTimer>

WifiIcon::WifiIcon(QWidget *parent) : QWidget(parent)
{
    m_wifiStrength = wifiStrength::Zero;
}

void WifiIcon::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);

    double Width = width();
    double Height = height();
    painter.setPen(Qt::SolidLine);
    int minWidHei;
    if(Height>Width){
        minWidHei=Width;
    }else{
        minWidHei=Height;
    }
    double radius_1 = minWidHei/9.5;
    double radius_2 = Height*0.85;
    int arcHeight = Height/10.5;

    QColor havaSignal = Qt::white;
    QColor noSignal = QColor(100,100,100);
    int splitValue=0;
    switch(m_wifiStrength)
    {
    case WifiIcon::Four:
        splitValue=4;
        break;
    case WifiIcon::Three:
        splitValue=3;
        break;
    case WifiIcon::Two:
        splitValue=2;
        break;
    case WifiIcon::One:
        splitValue=1;
        break;
    default:
        break;
    };

    for(int i=1;i<5;i++){
        if(i<=splitValue&&splitValue!=0){
            painter.setBrush(havaSignal);
            painter.setPen(havaSignal);
        }else{
            painter.setBrush(noSignal);
            painter.setPen(noSignal);
        }
        switch (i) {
        case 1:
            painter.drawEllipse(QPointF(Width*0.5,Height*0.88),radius_1,radius_1);
            painter.translate(QPointF(Width*0.5,Height*0.9));
            break;
        case 2:
            drawCircularArc(&painter, radius_2*0.40,45,90, arcHeight);
            break;
        case 3:
            drawCircularArc(&painter, radius_2*0.70,45,90, arcHeight);
            break;
        case 4:
            drawCircularArc(&painter, radius_2, 45,90, arcHeight);
            break;
        }
    }
}

void WifiIcon::drawCircularArc(QPainter *painter, int radius, int startAngle, int angleLength, int arcHeight)
{
    QRectF rect(-radius, -radius, radius<<1, radius<<1);
    QPainterPath path;
    path.arcTo(rect, startAngle, angleLength);

    QPainterPath subPath;
    subPath.addEllipse(rect.adjusted(arcHeight, arcHeight, -arcHeight, -arcHeight));

    path -= subPath;
    painter->drawPath(path);
}

void WifiIcon::setStrength(wifiStrength strength)
{
    m_wifiStrength = strength;
    update();
}
3、示例下载

标签:WifiIcon,wifiStrength,QT,int,void,wifi,break,splitValue,图标
From: https://blog.csdn.net/u012959478/article/details/140293936

相关文章

  • QT设置回调函数给python调用——参数法
    这种方法将回调函数作为python函数参数对象的方法来使用。Qt已经添加了Python库,并且能够正常调用Python的API,可以成功调用Python的代码块,这部分可以参考我另外一篇博客:QT中调用python中的函数-Henkk-博客园(cnblogs.com)1.QT相关函数定义1.1创建回调函数例如下面两个函......
  • Qt 控件的简单实例化
    记录一个初学小白的学习过程,记录一些浅显的学习笔记GroupBoxGroupBox控件的作用是组织界面元素,将一组相关的控件组合在一起,并在顶部显示一个标题。基类:QWidget (第一部分是widget.h)(第二部分是widget.cpp)#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#inc......
  • [QT入门]标签控件(QLabel)
    一、概述QLabel是Qt中用于显示文本或图像的控件。它通常被用作标签或显示静态信息的区域。QLabel控件是图形用户界面(GUI)开发中的基础元素之一,广泛应用于各种Qt应用程序中。QLabel控件的灵活性和易用性使其成为开发过程中不可或缺的一部分。二、QLabel控件的基本属性和方法1.......
  • 构建 Qt 项目
    使用qmake构建Qt项目源代码创建一个Qt项目文件(.pro文件)和一个源文件:MyQtProject.pro:QT+=coreguiCONFIG+=c++11SOURCES+=main.cpp#如果你有UI文件或头文件,也可以添加到这里。#HEADERS+=mainwindow.h#FORMS+=mainwindow.uimain.cpp:#inc......
  • QT中调用python中的函数
    1.创建py文件例如名为“python_script.py”的python文件:#python_script.pydefgreet(name):return"Hello,"+name+"!" 2.Qt的pro文件中包含python的头文件和库INCLUDEPATH+=python解释器的安装目录\includeLIBS+=-Lpython解释器的安装目录\libs-lpyt......
  • Windows 电脑查看 WiFi 密码的方法都有哪些?
    从设置面板中查看当你使用的是笔记本电脑并且连接WiFi之后可以在设置面板中查看WiFi密码,首先打开设置界面,然后点击网络和Internet,找到WiFi之后点击进入,然后点击管理已知网络。然后点击已经连接好的无线网络。进入之后点击查看WiFi安全密钥区域的显示按钮,就可以看......
  • 香橙派编译linux内核支持ebpf和虚拟WIFI
    前言上一篇文章香橙派5plus上跑云手机方案一redroid(带硬件加速)中说了怎么运行redroid,这篇补一下怎么修改参数编译内核。补充上篇文章有个内容需要补充一下:更新完内核需要用下面的命令防止内核被apt更新,不然后面使用aptupdate又回到官方的内核(注意版本号,当前是1009)。sudo......
  • 关于Qt是否免费使用的问题
    如果公司用Qt开发闭源商业桌面软件,在Windows/Mac/Linux上,可以使用动态库链接方式,遵循LGPL协议,是不用付费的,也不用开源你的代码。只需在你的商业软件的about等一些小角落,说明你使用了Qt,遵循LGPLV3协议即可。那商业付费什么意思呢?就是指的你使用静态库链接的方式,......
  • [QT入门]常用控件
    1.QPushButton(按钮)常用函数:setText(constQString&text):设置按钮上显示的文本。clicked(boolchecked=false)[signal]:按钮被点击时发出的信号。setIcon(constQIcon&icon):设置按钮上的图标。代码示例:QPushButton*button=newQPushButton("ClickMe!",th......
  • QT移植到imx6ull ARM板子上面
    目录前言:1.资料准备:2.编译tslib库3.编译qt库源码4.配置arm板子qt和tslib环境5.qt安装和配置6.新建QT工程7.arm板子运行第一个qt程序8.关闭arm板子出厂gui程序前言:本文章是移植qt库到imx6ull上面能够运行,同时移植tslib库(触摸屏)到imx6ull上面,适用于大部分arm板......