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

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();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1619833.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

在window上配置NASM

NASM是支持x86、x64架构CPU的汇编器(汇编软件)&#xff1b;NASM也支持大量的文件格式&#xff0c;包括Linux&#xff0c;*BSD&#xff0c;a.out&#xff0c;ELF&#xff0c;COFF&#xff0c;Mach−O&#xff0c;Microsoft 16−bit OBJ&#xff0c;Win32以及Win64&#xff0c;同…

pc单机版雷电修改器源码

记得以前第一次接触电脑玩的第一个游戏就是雷电&#xff0c;那时候觉得这游戏真好玩&#xff0c;很过瘾。闲来没事干&#xff0c;所以想重温一下游戏&#xff0c;&#xff08;当时玩的不是这个版本的雷电&#xff09;&#xff0c;那时候是和小伙伴一起玩的&#xff0c;可惜现在…

《愤怒的小鸟》登陆PC 绿色免安装版首发

这群去年风靡手机的小鸟就不用过多的介绍了&#xff0c;一个月前其开发商游戏开发商Rovio表示将会推出PC版。今天为大家带来的就是绿色免安装版的愤怒的小鸟。 游戏的玩法很简单&#xff0c;将弹弓上的小鸟弹出去&#xff0c;砸到绿色的肥猪&#xff0c;将肥猪全部砸到就能过关…

Pygame小游戏之俄罗斯方块凭什么火了30年?(史上最畅销单机游戏)

前言 一款俄罗斯方块火了30年&#xff0c;成为有史以来最畅销的单机游戏。 它为什么有那么的魔力经久不衰? 小编总结了一些原因&#xff1a;上手极其简单&#xff0c;技巧却很多&#xff0c;满足在混乱中创造秩序的渴望…… 工程师阿列克谢说&#xff0c;人们并没有意识到&…

硬盘图标修改器 V1.0 绿色版

软件名称&#xff1a;硬盘图标修改器 V1.0 绿色版软件语言&#xff1a; 简体中文授权方式&#xff1a; 免费软件应用平台&#xff1a; Win7 / Vista / Win2003 / WinXP / Win2008 软件大小&#xff1a; 12.3MB图片预览&#xff1a; 软件简介:是否厌倦了千篇一律的Windows硬盘图…

Java多线程与并发编程

课程地址&#xff1a; https://www.itlaoqi.com/chapter.html?sid98&cid1425 源码文档&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1WMvM3j6qhyjIeAT87kIcxg 提取码&#xff1a;5g56 Java多线程与并发编程 1-并发背后的故事什么是并发 2-你必须知道线程的概念程…

“黑客”入门学习之“单机游戏外挂原理与实现”

“黑客”入门学习之“单机游戏外挂原理与实现”&#xff08;文末全套黑客资料教程&#xff09; 昨天给小伙伴们分享了一篇"游戏外挂原理与实现"的文章&#xff0c;小伙伴们很热情&#xff0c;反响很好&#xff0c;好多朋友私信我&#xff0c;或者直接回复我"写…

PMP P-03 Scope Management

范围管理&#xff1a;要做多少事情&#xff0c;内容

数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成

数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成 目录 数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成生成效果基本描述程序设计参考资料 生成效果 基本描述 数据生成 | MATLAB实现GAN生成对抗网络结合SVM支持向量机的数据生成。 生成对抗…

代码随想录算法训练营第四十七天|LeetCode 382,115

目录 LeetCode 392.判断子序列 动态规划五步曲&#xff1a; 1.确定dp[i][j]的含义 2.找出递推公式 3.初始化dp数组 4.确定遍历顺序 5.打印dp数组 LeetCode 115.不同的子序列 动态规划五步曲&#xff1a; 1.确定dp[i][j]的含义 2.找出递推公式 3.初始化dp数组 4.确定遍历顺序 …

压缩包密码的破解

给压缩包添加密码 解密 将压缩包的加密信息放入新建的文本文档 zip2john 123.zip > mima.txt 使用john解密 john mima.txt john的密码字典路径 cd /etc/share/john ls 查看有多少行密码

压缩包解压密码怎么破

从网上下载的资源大多数都是以压缩包形式被下载下来&#xff0c;我们需要通过解压压缩包拿到我们想要的文件&#xff0c;但是有时候可能会遇到解压压缩包的时候需要密码的情况&#xff0c;那压缩包解压秘密该怎么破解呢&#xff1f;如果文件资源对你来说很重要的话&#xff0c;…

Linux系统:CentOS 7 CA证书服务器部署

目录 一、理论 1.CA认证中心 2.CA证书服务器部署 二、实验 1. CA证书服务器部署 一、理论 1.CA认证中心 &#xff08;1&#xff09;概念 CA &#xff1a;CertificateAuthority的缩写&#xff0c;通常翻译成认证权威或者认证中心&#xff0c;主要用途是为用户发放数字证…

D - President - 背包dp

分析&#xff1a; 需要让所有x大于y的对应的z的总数大于z总共的数量的一半&#xff0c;找最小需要转化的数量&#xff0c;那么可以转化为01背包问题&#xff0c;z作为体积&#xff0c;每组的x和y都可以计算出一个值表示需不需要转化&#xff0c;作为背包价值&#xff0c;如果x大…

利用阿里云服务器公网IP+FRP搭建内网穿透

1 必要条件&#xff1a; 一台公网IP服务器&#xff0c;这里采用阿里云ECS服务器。 此处将IP定义为:serverA-IP 2 服务器下载代码&#xff1a; # mkdir /data # cd /data # git clone https://github.com/fatedier/frp.git # cd frp3 编译代码 编译需要时间 # make go fmt .…

计算机组成原理学习笔记-精简复习版

一、计算机系统概述 计算机系统硬件软件 计算机硬件的发展&#xff1a; 第一代计算机&#xff1a;(使用电子管)第二代计算机&#xff1a;(使用晶体管)第三代计算机&#xff1a;(使用较小规模的集成电路)第四代计算机&#xff1a;(使用较大规模的集成电路) 冯诺依曼体系结构…

FLASH 停止后 IE无法使用

WINDOWS8 WINDOWS10系统下的IE10或者IE11出现 解决方法&#xff1a;打开https://www.flash.cn/

win10 家庭版无法使用IE浏览器

升级window10&#xff08;家庭版之后&#xff09;之后打开IE浏览器&#xff0c;打开照片都提示无法使用内置管理员账户打开&#xff0c;网上查看说打开secpol.msc&#xff0c;提示系统不存在该文件&#xff0c;经过一波周折之后&#xff0c;发现了一个快速解决的方案&#xff0…

单片机基础知识 06 (中断-2)

一. 定时器中断概念 51单片机的内部有两个16位可编程的定时器/计数器&#xff0c;即定时器T0和定时器T1。 52单片机内部多一个T2定时器/计数器。 定时器/计数器的实质是加1计数器&#xff08;16位&#xff09;&#xff0c;由高8位和低8位两个寄存器组成。 TMOD是定时器/计数器…

八大排序算法 (python版本)

八大排序算法 个人学习笔记 如有问题欢迎指正交流快速排序经常考&#xff0c; 如果只掌握一个排序算法的话&#xff0c;首选快速排序算法 八大排序算法通常指的是以下八种经典排序算法&#xff1a; 1. 冒泡排序 (Bubble Sort) 使用场景&#xff1a;适用于小规模数据的排序&a…