Pen

Qt编写自定义控件4-旋转仪表盘

落花浮王杯 提交于 2019-12-01 16:28:47
前言 旋转仪表盘,一般用在需要触摸调节设置值的场景中,其实Qt本身就提供了QDial控件具有类似的功能,本控件最大的难点不在于绘制刻度和指针等,而在于自动计算当前用户按下处的坐标转换为当前值,这个功能想了很久,也看了QDial的源码,他里边写的非常复杂,最后还是参考的我打99分(100分留给自己未来写的书,哈哈!)的Qt书籍《c++ gui qt 4编程》中的篇章才写出来的,关键需要用到atan2将坐标转为值,看来学好数学真的很重要。 实现的功能 1:支持指示器样式选择 圆形指示器/指针指示器/圆角指针指示器/三角形指示器 2:支持鼠标按下旋转改变值 3:支持负数刻度值 4:支持设置当前值及范围值 5:支持左右旋转角度设置 6:支持设置大刻度数量和小刻度数量 7:支持设置各种颜色 8:字号随窗体拉伸自动变化 9:可设置是否显示当前值 效果图 头文件代码 #ifndef GAUGEDIAL_H #define GAUGEDIAL_H /** * 旋转仪表盘控件 作者:feiyangqingyun(QQ:517216493) 2016-11-11 * 1:支持指示器样式选择 圆形指示器/指针指示器/圆角指针指示器/三角形指示器 * 2:支持鼠标按下旋转改变值 * 3:支持负数刻度值 * 4:支持设置当前值及范围值 * 5:支持左右旋转角度设置 * 6:支持设置大刻度数量和小刻度数量 *

CSS实现footer“吸底”效果

帅比萌擦擦* 提交于 2019-11-30 18:20:06
我们经常会遇到这样的问题:如何用css来实现底部元素可“粘住底部”的效果,对于“粘住底部”,本文有两种理解: 一是无论内容的多少,我们都希望使按钮,固定于可视窗口的底部,且内容区是可滚动的。 二是当内容区的内容较少时,页脚区不是随着内容区排布,而是始终显示在屏幕的最下方;当内容区的内容较多时,页脚能随着内容区的增高而撑开,始终显示在页面的最底部。 谈到“吸底”效果的实现,大家可能较多了解到的是sticky-footer布局,但这个方式大多是用来解决第二种情况的实现。本文将采用以下的三种方案来分别来实现以上这两种效果,并简单实现的原理以及其的适用情况。 容器(wrapper)包含两部分,分别是内容(content)和底部需固定的区域(footer)。 html设置 <!-- wrapper是包裹content和footer的父容器 --></div> <div class= "wrapper" > <div class= "content" > <ul> <!-- 页面主体内容区域 --></div> <li>1.这是内容,这是内容……</li> <li>2.这是内容,这是内容……</li> <li>3.这是内容,这是内容……</li> <li>4.这是内容,这是内容……</li> <li>5.这是内容,这是内容……</li> <li>6.这是内容,这是内容……</li> <li>7

CSS实现footer“吸底”效果

旧城冷巷雨未停 提交于 2019-11-30 18:18:31
我们经常会遇到这样的问题:如何用css来实现底部元素可“粘住底部”的效果,对于“粘住底部”,本文有两种理解: 一是无论内容的多少,我们都希望使按钮,固定于可视窗口的底部,且内容区是可滚动的。 二是当内容区的内容较少时,页脚区不是随着内容区排布,而是始终显示在屏幕的最下方;当内容区的内容较多时,页脚能随着内容区的增高而撑开,始终显示在页面的最底部。 谈到“吸底”效果的实现,大家可能较多了解到的是sticky-footer布局,但这个方式大多是用来解决第二种情况的实现。本文将采用以下的三种方案来分别来实现以上这两种效果,并简单实现的原理以及其的适用情况。 容器(wrapper)包含两部分,分别是内容(content)和底部需固定的区域(footer)。 html设置 <!-- wrapper是包裹content和footer的父容器 --></div> <div class= "wrapper" > <div class= "content" > <ul> <!-- 页面主体内容区域 --></div> <li>1.这是内容,这是内容……</li> <li>2.这是内容,这是内容……</li> <li>3.这是内容,这是内容……</li> <li>4.这是内容,这是内容……</li> <li>5.这是内容,这是内容……</li> <li>6.这是内容,这是内容……</li> <li>7

Qt编写自定义控件62-探探雷达

南楼画角 提交于 2019-11-30 18:01:38
一、前言 随着移动互联网的盛行,现在手机APP大行其道,每个人的手机没有十几个APP都不好意思说自己是现代人,各种聊天、购物、直播、小视频等APP,有个陌生人社交的APP叫探探,本人用过几次,当然不是去为了找对象,而是纯粹为了好玩研究下他的U设计和软件逻辑流程等,其中有个雷达控件,单击以后可以搜索附近的异性进行配对,这个雷达控件的效果蛮好的,于是手痒琢磨着用Qt来实现一个,毕竟自己写了150多个控件了,已经上瘾了,对各种效果都如鱼得水,看到各种效果都不自然的想到编码思路等。 这个控件的核心其实就是外围的那个扫描圈和发散的扫描线,中间变大变小恢复正常的圆形头像,外围的扫描圈采用锥形渐变颜色,通过透明度控制形成扫描效果,核心方法就是drawPie,至于扩散圈,需要识别到单击以后将扩散圈存入队列,因为可能会单击多次,产生多个扩散圈,至于中间头像的动态效果,采用三个QPropertyAnimation来实现,一个负责变大,一个负责变小,一个负责恢复正常,然后三个动画加入到QSequentialAnimationGroup动画序列中,按照顺序执行。 二、实现的功能 1:可设置中间图像 2:可设置图像的边框宽度+边框颜色,产生圆形图像效果 3:可设置扫描线的最大半径 4:可设置扫描线的边框宽度 5:可设置扩散圈的线条宽度 6:可设置扫描线的每次移动的步长 7:可设置扩散圈的每次移动的步长 8

Qt编写自定义控件17-按钮进度条

我的未来我决定 提交于 2019-11-30 18:01:28
前言 按钮进度条,顾名思义,表面上长得像一个按钮,单击以后切换成进度条指示按钮单击动作执行的进度,主要用在一些需要直接在按钮执行动作显示对应进度的场景,在很多网页中经常看到这种效果,这个效果有个优点就是直接在原地显示进度条,不占用其他位置,然后提供各种颜色可以设置。近期大屏电子看板程序接近尾声了,文章末尾贴出几张动图效果。 实现的功能 1:可设置进度线条宽度+颜色 2:可设置边框宽度+颜色 3:可设置圆角角度+背景颜色 效果图 头文件代码 #ifndef PROGRESSBUTTON_H #define PROGRESSBUTTON_H /** * 按钮进度条控件 作者:倪大侠(QQ:393320854 zyb920@hotmail.com) 2019-4-17 * 1:可设置进度线条宽度+颜色 * 2:可设置边框宽度+颜色 * 3:可设置圆角角度+背景颜色 */ #include <QWidget> class QTimer; #ifdef quc #if (QT_VERSION < QT_VERSION_CHECK(5,7,0)) #include <QtDesigner/QDesignerExportWidget> #else #include <QtUiPlugin/QDesignerExportWidget> #endif class QDESIGNER_WIDGET

Qt编写自定义控件29-颜色选取面板

大城市里の小女人 提交于 2019-11-30 18:00:45
一、前言 这个控件主要是模仿QColorDialog对话框中的颜色选取面板,提供一个十字形状的标识器,鼠标按下开始选取颜色,移动到哪就选择该处的颜色值,对应右侧颜色条放大显示,本控件的难点就是如何绘制一个边缘框限定鼠标只能在此框中移动,还有一个就是如何绘制颜色渐变的背景颜色集合,这里采用的是对每一个像素的高度区域设置不同的开始颜色+中间颜色+结束颜色,作为渐变颜色,然后设置QLinearGradient作为画笔的颜色进行绘制,其实就是假设宽度是100,其实是绘制了100条垂直方向的竖线而形成的效果。在绘制画布的时候,可以将其绘制到一个pixmap上,这样也方便待会鼠标移动时候直接取该pixmap的某个像素点的颜色值。 二、实现的功能 1:可设置当前百分比,用于控制指针大小 2:可设置边框宽度 3:可设置边框颜色 4:可设置指针颜色 三、效果图 四、头文件代码 #ifndef COLORPANELHSB_H #define COLORPANELHSB_H /** * 颜色选取面板 作者:feiyangqingyun(QQ:517216493) 2017-11-17 * 1:可设置当前百分比,用于控制指针大小 * 2:可设置边框宽度 * 3:可设置边框颜色 * 4:可设置指针颜色 */ #include <QWidget> #ifdef quc #if (QT_VERSION < QT

Qt编写自定义控件15-百分比仪表盘

*爱你&永不变心* 提交于 2019-11-30 18:00:21
前言 百分比仪表盘,主要的应用场景是展示销售完成率、产品合格率等,也可以作为一个进度百分比展示,可以独立设置对应的标题文字,标题文字的颜色和整体的颜色都可以单独设置,建议设置成统一的风格,这样会显得更加美观,贴一张星空图作为背景就更美观,本控件也是作为大屏UI界面的一个子控件,用来展示产品的合格率。 实现的功能 1:可设置范围值,支持负数值 2:可设置精确度,最大支持小数点后3位 3:可设置大刻度数量/小刻度数量 4:可设置开始旋转角度/结束旋转角度 5:可设置仪表盘的标题 6:可设置外圆背景/内圆背景/饼圆三种颜色/刻度尺颜色/文字颜色 7:自适应窗体拉伸,刻度尺和文字自动缩放 8:可自由拓展各种渐变色,各圆的半径 效果图 头文件代码 #ifndef GAUGEPERCENT_H #define GAUGEPERCENT_H /** * 百分比仪表盘控件 作者:feiyangqingyun(QQ:517216493) 2018-8-30 * 1:可设置范围值,支持负数值 * 2:可设置精确度,最大支持小数点后3位 * 3:可设置大刻度数量/小刻度数量 * 4:可设置开始旋转角度/结束旋转角度 * 5:可设置仪表盘的标题 * 6:可设置外圆背景/内圆背景/饼圆三种颜色/刻度尺颜色/文字颜色 * 7:自适应窗体拉伸,刻度尺和文字自动缩放 * 8:可自由拓展各种渐变色,各圆的半径 */

Qt编写自定义控件31-面板仪表盘控件

流过昼夜 提交于 2019-11-30 17:59:45
一、前言 在Qt自定义控件中,仪表盘控件是数量最多的,写仪表盘都写到快要吐血,可能是因为各种工业控制领域用的比较多吧,而且仪表盘又是比较生动直观的,这次看到百度的echart中有这个控件,所以也来模仿做了一个,其实掌握了一两个仪表盘的绘制方法以后,其他仪表盘的绘制都是如鱼得水,基本上变化很小。总结起来就如下几点: 1:仪表盘边框 2:刻度尺 3:刻度值 4:圆环进度 5:指针 6:当前值 7:仪表盘标题 无论什么仪表盘,基本上包含的上面几个要素的大部分,所以只要掌握几个要素的绘制,任何仪表盘绘制都是轻轻松松信手拈来。无非就是有些仪表盘要求刻度尺在里边有些要求在外边,有些要求有圆环进度不同颜色显示,有些要求可以自定义左侧起始角度和右侧结束角度,有些要求指针圆形方形椭圆形等,有些要求值改变的时候带一些缓慢的动画过渡效果等。 二、实现的功能 1:可设置范围值,支持负数值 2:可设置精确度+刻度尺精确度,最大支持小数点后3位 3:可设置大刻度数量/小刻度数量 4:可设置开始旋转角度/结束旋转角度 5:可设置是否启用动画效果以及动画效果每次移动的步长 6:可设置刻度颜色+文字颜色+圆环的宽度和颜色 7:自适应窗体拉伸,刻度尺和文字自动缩放 8:可设置单位以及仪表盘名称 三、效果图 四、头文件代码 #ifndef GAUGEPANEL_H #define GAUGEPANEL_H /** *

Qt编写自定义控件62-探探雷达

独自空忆成欢 提交于 2019-11-30 17:56:11
一、前言 随着移动互联网的盛行,现在手机APP大行其道,每个人的手机没有十几个APP都不好意思说自己是现代人,各种聊天、购物、直播、小视频等APP,有个陌生人社交的APP叫探探,本人用过几次,当然不是去为了找对象,而是纯粹为了好玩研究下他的U设计和软件逻辑流程等,其中有个雷达控件,单击以后可以搜索附近的异性进行配对,这个雷达控件的效果蛮好的,于是手痒琢磨着用Qt来实现一个,毕竟自己写了150多个控件了,已经上瘾了,对各种效果都如鱼得水,看到各种效果都不自然的想到编码思路等。 这个控件的核心其实就是外围的那个扫描圈和发散的扫描线,中间变大变小恢复正常的圆形头像,外围的扫描圈采用锥形渐变颜色,通过透明度控制形成扫描效果,核心方法就是drawPie,至于扩散圈,需要识别到单击以后将扩散圈存入队列,因为可能会单击多次,产生多个扩散圈,至于中间头像的动态效果,采用三个QPropertyAnimation来实现,一个负责变大,一个负责变小,一个负责恢复正常,然后三个动画加入到QSequentialAnimationGroup动画序列中,按照顺序执行。 二、实现的功能 1:可设置中间图像 2:可设置图像的边框宽度+边框颜色,产生圆形图像效果 3:可设置扫描线的最大半径 4:可设置扫描线的边框宽度 5:可设置扩散圈的线条宽度 6:可设置扫描线的每次移动的步长 7:可设置扩散圈的每次移动的步长 8

Why does use of pens with dash patterns cause huge (!) performance degredation in WPF custom 2D drawing?

妖精的绣舞 提交于 2019-11-30 15:26:49
Hope anyone can shed light on this so I can use pens with dash patterns? I am writing a scrollable chart (a Panel inside ScrollViewer that implements IScrollInfo ) in WPF using DrawingVisual 's DataContext.Draw X . I have several thousand DrawingVisual s that get scrolled by using TranslateTransform on the Panel that hosts them. I implemented a grid by placing a Panel on top of it and drawing simple horizontal lines from one edge to the other using DataContext.DrawLine(pen, new Point(0, y), new Point(widthOfPanel, y)); //(note: these lines are always static, they never move). The scroll