QT之“飞镖盘”自定义控件

  • 前言
    • 控件预览
    • 实现

前言

现在发一个我之前看过有人写了一个抽奖转盘,所以闲来无事写了一个飞镖盘控件,在我看来它其它没有什么实用价值,纯属写来玩玩而已。

控件预览

实现

  1. 画背景
void QDartboard::drawBkg(QPainter *painter,)
{int radius = 95;painter->save();painter->setBrush(bkgColor);painter->drawEllipse(-radius, -radius, radius << 1, radius << 1);painter->restore();
}
  1. 画扇形
void QDartboard::drawFans(QPainter *painter)
{float rad = 0;float panAngle = 360 / fanNum;int radius = 80;for(int i = 1; i <= fanNum; i++){if(i % 2 == 0){gradientArc(painter, radius, rad + panAngle * i, panAngle, qRgb(200, 0, 0));gradientArc(painter, radius - ringSize, rad + panAngle * i,  panAngle, qRgb(0, 200, 0));gradientArc(painter, radius - 30, rad + panAngle * i,  panAngle, qRgb(200, 0, 0));gradientArc(painter, radius - 30 - ringSize, rad + panAngle * i,  panAngle, qRgb(0, 200, 0));}else{gradientArc(painter, radius, rad + panAngle * i,  panAngle, qRgb(0, 200, 0));gradientArc(painter, radius - ringSize, rad + panAngle * i,  panAngle, qRgb(200, 0, 0));gradientArc(painter, radius - 30, rad + panAngle * i,  panAngle, qRgb(0, 200, 0));gradientArc(painter, radius - 30 - ringSize, rad + panAngle * i,  panAngle, qRgb(200, 0, 0));}}gradientArc(painter, radius - 70, 0,  360, qRgb(0, 200, 0));gradientArc(painter, radius - 75, 0,  360, qRgb(200, 0, 0));
}void QDartboard::gradientArc(QPainter *painter, int radius, int startAngle, int angleLength, QRgb color)
{painter->save();// 渐变色//QRadialGradient gradient(0, 0, radius);//gradient.setColorAt(0, Qt::white);//gradient.setColorAt(1.0, color);//painter->setBrush(QColor(color));//painter->setPen(color);// << 1(左移1位)相当于radius*2 即:150*2=300//QRectF(-150, -150, 300, 300)QRectF rect(-radius, -radius, radius << 1, radius << 1);QPainterPath path;path.arcTo(rect, startAngle, angleLength);painter->setPen(Qt::NoPen);painter->drawPath(path);painter->fillPath(path, QBrush(QColor(color)));painter->restore();
}
  1. 画刻度值
void QDartboard::drawScaleNum(QPainter *painter)
{int radius = 85;painter->save();painter->setPen(Qt::white);QFont font("Arial", 6, QFont::Bold, false);//设置字体的类型,大小,加粗,斜体painter->setFont(font);painter->rotate(90 + ((360 / fanNum) / 2));for (int i = 1; i <= fanNum; i++){QString strValue = QString("%1").arg(i);double textWidth = fontMetrics().width(strValue);//double textHeight = fontMetrics().height();painter->rotate(-360 / fanNum);painter->drawText(0 - textWidth / 2, -radius, strValue);}painter->restore();
}

QT之“飞镖盘”自定义控件相关推荐

  1. Qt创建设计师自定义控件(Qt Designer自定义控件)

    Qt提供了一个Designer界面,使得我们可以自由拖动控件对ui进行布局,但所有的控件都是固定的,如果我们想要自定义一个自己设计的控件,添加到Designer中,可供设计者自由设计.那么可以进行如下 ...

  2. Qt/C++编写自定义控件44-天气仪表盘

    一.前言 天气仪表盘控件是所有控件中唯一一个使用了svg矢量图的控件,各种天气图标采用的矢量图,颜色变换采用动态载入svg的内容更改生成的,其实也可以采用图形字体来做,本次控件为了熟悉下svg在Qt中 ...

  3. Qt/C++编写自定义控件10-云台仪表盘

    一.前言 做过安防视频监控的同学都清楚,在视频监控系统软件上都可以看到一个云台控制区域,可以对球机进行下下左右等八个方位的运动控制,还可以进行复位,一般都是美工作图好,然后贴图的形式加入到软件中,好处 ...

  4. Qt/C++编写自定义控件48-面板窗体控件

    一.前言 很多时候需要有一个控件,能够替代容器控件,自动容纳多个widget,自适应宽高,然后提供滚动条功能,这就必然需要用到QScrollArea控件,可设置各个子面板的间距等,也在很多系统中用到, ...

  5. Qt/C++编写自定义控件40-导航进度条

    一.前言 导航进度条控件,其实就是支付宝.京东.淘宝订单页面的进度控件,提示当前第几步,总共有几步,然后当前进度特殊颜色显示,每个进度带有时间文字等信息,本控件特意将三种样式风格都集成进去了,京东订单 ...

  6. 【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.1 效果演示、技术点

    本节对应的视频讲解:B_站_视_频 https://www.bilibili.com/video/BV14P4y197pi Qt 中绘图用到的类是 QPainter,可以实现点.线.矩形.圆形.多边形 ...

  7. Qt编写控件属性设计器4-加载属性

    一.前言 控件能加载拖曳拉伸了,这些都是基本的前提工作,接下来的重点就是要动态加载选中控件的属性了,Qt的属性机制那是异常的强大,只能用强大到爆来形容,Qt中编写自定义控件,如果属性都用Q_PROPE ...

  8. 如何化解总想快速崛起导致的焦虑

    最近加入了安晓辉老师的知识星球『 副业赚钱 』,每周都会有一些案例浮现出来,比如Qt侠卖自定义控件和GUI方案月入三万(识别下面二维码可查看). 这些案例,一方面会给我们指引和激励,另一方面,也会带给 ...

  9. qt获取当前系统音量值_Qt编写自定义控件50-迷你仪表盘

    一.前言 这个控件取名叫迷你仪表盘,是以为该控件可以缩小到很小很小的区域显示,非常适合小面积区域展示仪表数据使用,还可以手动触摸调节进度,是我个人觉得最漂亮小巧的一个控件.初次看到类似的控件是在一个音 ...

最新文章

  1. mongodb 安装启动
  2. 【矩阵乘法】递推(ssl 1532)
  3. Linux安装与基本操作命令与JDK的安装,Mysql的安装,Tomcat的安装
  4. adobe photoshop教程:使用PS创建逼真生动的水下文本效果
  5. 二级计算机题世界动物日,计算机二级考试真题-PPT-张宇-世界动物日介绍
  6. Set ip IPv6 env (by quqi99)
  7. win10永久设置护眼颜色
  8. 两种曲线下面积AUC(Area Under the ROC Curve):ROC-AUC、PR-AUC(性能度量)
  9. matlab的persistent,MATLAB局部静态变量类型persistent
  10. 光学显微镜分辨率极限
  11. awk 的内置变量 NF、NR、FNR、FS、OFS、RS、ORS
  12. uva 571 Jugs
  13. 联想x3650服务器安装硬盘,IBM x3650 M2服务器系统安装攻略(组图)
  14. 中国计算机学会推荐中文科技期刊目录(2019年)
  15. vSphere 6.7 U3部署win11
  16. 如何学习数据分析(总结自网易及B站up主)
  17. 哪里可以免费下载适合Mac版苹果电脑端解压缩软件
  18. 转型在即,迭创新高——重新认识BNB
  19. 计算机控制和dcs控制的区别,从几个方面了解DCS与PLC控制柜到底有什么区别
  20. 以太网电路中网络变压器集成共模电感,连接方向的选择

热门文章

  1. ZZULIOJ1033
  2. mysql unpivot_SQL(横表和纵表)行列转换,PIVOT与UNPIVOT的区别和使用方法举例,合并列的例子...
  3. cocos源码分析--SpriteBatchNode绘图原理(转--侵删)
  4. HRESULT的使用
  5. 视频编码会议常用网址
  6. 【JVM】jvm的体系结构
  7. 编程精粹 --Microsoft编写优质无错C程序秘诀
  8. Java Swing+SQL sever学生管理系统代码
  9. iterator_traits
  10. fifaol3服务器位置,《FIFA OL3》最热位置观察 传奇球星遍布服务器