效果图

QWidget自定义信号强度显示控件,比较简单,适合初学者。
主要就是继承于QWidget, 重写paintEvent以绘制;
源码如下:

signalwidget.h

#ifndef SIGNALWIDGET_H
#define SIGNALWIDGET_H/*!信号显示控件自适应长宽比例;widget 高度分为4份,信号柱由低到高使用对应份额;widget 宽度分为十份,四个信号柱各占一份,三个空白区域各占两份作者(csdn):为啥不吃肉捏
*/#include <QWidget>class SignalWidget : public QWidget
{Q_OBJECT
public:explicit SignalWidget(QWidget *parent = nullptr);/*! 信号强度 */enum class SignalStrength{Zero,One,Two,Three,Four};/*! 设置信号强度 */void setSignalStrength(SignalStrength newSignalStrength);protected:void paintEvent(QPaintEvent *event) override;private:SignalStrength m_signalStrength;};#endif // SIGNALWIDGET_H

signalwidget.cpp

#include "signalwidget.h"
#include <QPainter>SignalWidget::SignalWidget(QWidget *parent) : QWidget(parent)
{}void SignalWidget::paintEvent(QPaintEvent *event)
{Q_UNUSED(event);QPainter p(this);p.setRenderHint(QPainter::Antialiasing);//widget 高度分为4份,信号柱由低到高使用对应份额float hUnit = this->height() / 4.0;int h1 = hUnit * 1;int h2 = hUnit * 2;int h3 = hUnit * 3;int h4 = hUnit * 4;//widget 宽度分为十份,四个信号柱各占一份,三个空白区域各占两份float wUnit = this->width() / 10.0;int x1 = 1;int x2 = wUnit * 3;int x3 = wUnit * 6;int x4 = wUnit * 9 - 1;//border-radiusint rounded = wUnit / 2.0;QColor havaSignal = QColor(79, 134, 210);QColor noSignal = Qt::gray;QColor colorOne, colorTwo, colorThree, colorFour;colorOne = noSignal;colorTwo = noSignal;colorThree = noSignal;colorFour = noSignal;switch(m_signalStrength){case SignalStrength::Four:colorFour = havaSignal;case SignalStrength::Three:colorThree = havaSignal;case SignalStrength::Two:colorTwo = havaSignal;case SignalStrength::One:colorOne = havaSignal;default: break;};p.setPen(colorOne);p.setBrush(colorOne);p.drawRoundedRect(x1, this->height() - h1, wUnit, h1, rounded, rounded);p.setPen(colorTwo);p.setBrush(colorTwo);p.drawRoundedRect(x2, this->height() - h2, wUnit, h2, rounded, rounded);p.setPen(colorThree);p.setBrush(colorThree);p.drawRoundedRect(x3, this->height() - h3, wUnit, h3, rounded, rounded);p.setPen(colorFour);p.setBrush(colorFour);p.drawRoundedRect(x4, this->height() - h4, wUnit, h4, rounded, rounded);
}void SignalWidget::setSignalStrength(SignalStrength newSignalStrength)
{m_signalStrength = newSignalStrength;this->update();
}

使用:
我们在 ui 设计器中拖出一个widget或者在工程中 new 一个SignalWidget,在此我们使用比较快速的方式,在ui中拖出widget,并提升为 SignalWidget,然后如下设置:

ui->widget->setSignalStrength(SignalWidget::SignalStrength::Three);

运行如下:

Qt 自定义信号强度显示控件相关推荐

  1. Qt自定义/绘制旋钮控件

    Qt中需要自定义/绘制控件时,基本上继承自QWidget,重新实现绘制函数,定义大小,增加相应的信号和槽-- 例子:自定义旋钮控件,通过鼠标控制旋转(可通过Qt的世界变换旋转图形),并在旋转停止时触发 ...

  2. 自定义页码显示控件PageNumberView

    实现效果 上述效果使用了ViewPager+自制的PageNumberView实现的.下面来介绍一下具体实现: 首先是布局 <?xml version="1.0" encod ...

  3. Qt的基本控件——显示控件

    显示控件 1.label 作用就是用来显示一些文字的,或者用来贴图 1.加载资源方式: 右键项目-->add new 输入名字,就能得到一个qrc的一个包, 然后在这个位置添加前缀/image表 ...

  4. android lrc 歌词view,自定义View强势来袭,用自定义View实现歌词显示控件下篇之自定义LyricView的实现...

    在上篇中,我与大家分享了关于如何进行*.lrc歌词文件的解析,以及将解析完成后的歌词展示在镶嵌在ScrollView中的TextView上,就这样而言,一个简单的歌词显示功能也就实现了. 但是,如何才 ...

  5. 自定义LyricView实现歌词显示控件

    声明:本博客转载自郭霖微信公众号,优秀博客值得多次转播. 地址http://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650236950&a ...

  6. Android歌词显示控件TextView自定义

    1. 音乐播放,音乐播放,音乐播放放入服务中,那么App 退入后台音乐也可以播放 2. 歌词显示控件TextView自定义:    使用控件TextView,  为什么不用Listview,歌词不可以 ...

  7. Angular19 自定义表单控件

    1 需求 当开发者需要一个特定的表单控件时就需要自己开发一个和默认提供的表单控件用法相似的控件来作为表单控件:自定义的表单控件必须考虑模型和视图之间的数据怎么进行交互 2 官方文档 -> 点击前 ...

  8. C# Winform 通过FlowLayoutPanel及自定义的编辑控件,实现快速构建C/S版的编辑表单页面...

    个人理解,开发应用程序的目的,不论是B/S或是C/S结构类型,无非就是实现可供用户进行查.增.改.删,其中查询用到最多,开发设计的场景也最为复杂,包括但不限于:表格记录查询.报表查询.导出文件查询等等 ...

  9. 自定义工作流任务控件

    读moss sdk中的自定义工作流任务控件. 自定义工作流任务控件:任务的创建,修改,删除,完成于一体,同时定义了这四个动作的历史纪录. 自定义时封装属性:  1. 封装任务属性 IsTaskComp ...

最新文章

  1. R包reshape2,轻松实现长、宽数据表格转换
  2. MFC模态窗口与非模态窗口
  3. C#用Zlib压缩或解压缩字节数组
  4. 数据结构是如何装入 CPU 寄存器的?
  5. 矩阵求多元函数的通解_Hessian矩阵
  6. 中级联选择中多级选择方法使用_PCB加工中,使用选择性波峰焊的优缺点是什么?...
  7. 微型计算机常常采用三种线结构,中北大学微机原理习题册终极版考试必备
  8. [论文翻译] Estimation of Image Rotation Angle Using Interpolation-Related Spectral Signatures
  9. UltraWebGrid两种显示样式
  10. Matlab的数据导入和导出
  11. MYSQL union 联合查询
  12. 人均劳动生产率的单位_生产率的单位是什么?
  13. ARPG游戏的战斗系统设计
  14. Docer 在centos中修改默认镜像配置
  15. python画爱心 好看漂亮的表白代码
  16. 智慧工地具有哪些社会意义?
  17. 物联网培训预示着我们将进入智能时代
  18. Learning Texture Transformer Network for Image Super-Resolution(全译文+大量名词链接)读论文记录①
  19. Simpsons’ Hidden Talents——kmp入门
  20. 粘塑性自洽多晶体塑性模型VPSC(一)

热门文章

  1. mysql模糊查询限制范围_MySql 模糊查询、范围查询
  2. js图片格式转换(File、blob、二进制)
  3. nginx-静态文件服务详解
  4. 数据透视表 筛选_筛选器选择中的数据透视图标题
  5. ACS712工作原理(20A为例)、设计及PCB布线
  6. android路由框架 简书,【推荐】好用强大的Android路由框架--Rudolph
  7. [分享]linux Y480安装显卡驱动经历!
  8. 一文带你看透天气预报
  9. Oracle exists 用法
  10. AI人工智能 > Nvidia英伟达 > Jetson Nano模组尺寸