Pen

VCL画图实例

為{幸葍}努か 提交于 2020-05-07 12:53:59
代码下载: https://download.csdn.net/download/zhujianqiangqq/12394576 代码实例: 1 unit Unit1; 2 3 interface 4 5 uses 6 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, 7 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; 8 type 9 TCanvasData = record // 定义绘制数据数组 10 // 画笔可设置的参数 11 PenStartSize: Integer; // 画笔开始大小 12 PenMinSize: Integer; // 画笔最小大小 13 PenMaxSize: Integer; // 画笔最大大小 14 PenMobileBorder: Integer; // 移动界限,超过这个值就改变笔大小值 15 PenChangeValue: Integer; // 画笔每次改变的大小 16 PenSizeChangeSpeed: Integer; // 笔的改变速度,越小改变的速度越快 17 // 画图用到的参数 18

Qt实现流动管道的一个思路

自作多情 提交于 2020-05-05 13:16:32
分为管道段Section和管道连接段Join两部分。 PipeSection使用drawLine绘制 PipeJoin使用drawArc绘制 都加入到path中去,最后调研drawPath来绘制 为了体现管道的立体性,定义管道的内壁宽度InnerLayerWidth和外壁宽度OutterLayerWidth。外壁用纯色填充,内壁用渐变色填充。 流动Flow: 定义好流动路径,将画笔宽适当调窄,设置合适的颜色,使用Dash模式线型来绘制流动路径,并通过定时器,动态改变DashOffset来模拟流动效果。 为简单模拟起见 使用较宽的QPen通过绘制Polyline来绘制管道,通过较窄Dash线的QPen来绘制液体流动。 Qt实现Pipe图形项: #ifndef ITEMPOLYLINE_H #define ITEMPOLYLINE_H #include " ItemBase.h " class ItemPolyline : public QObject , public ItemBase { Q_OBJECT public : ItemPolyline(QSize size, QGraphicsItem *parent = nullptr); virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem *

java设计模式------工厂设计模式

↘锁芯ラ 提交于 2020-05-03 22:45:08
总结 以上就是工厂模式的基本实现和详细说明。包括了简单工厂模式、工厂方法模式、抽象工厂模式。我们可以基于需求来选择合适的工厂模式 基本概念:为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 分为三类: 简单工厂模式 Simple Factory :不利于产生系列产品; 工厂方法模式 Factory Method :又称为多形性工厂; 抽象工厂模式 Abstract Factory :又称为工具箱,产生产品族,但不利于产生新的产品; 这三种模式从上到下逐步抽象,并且更具一般性。GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。 先来看看它的组成: 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。 简单工厂模式(Simple Factory Pattern) 从简单的工厂模式开始说起的话,我们要知道工厂模式的目的是什么?工厂模式的目的在于程序的可扩展性

WPF自定义控件 —— 自绘篇

喜你入骨 提交于 2020-05-03 14:07:18
原文: WPF自定义控件 —— 自绘篇 一般来说控件主要是画面呈现、事件的处理、布局自动化,当然完善的控件还应该牵涉设计时、UI自动化测试的定义。 首先我们来说最简单的画面的呈现。 一.在自定义控件上画矩形 增加一个自定义控件类: 打开创建的类重载OnRender函数并注释掉静态构造函数,代码如下 public class CustomerRender : Control { // static CustomerRender() // { // DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomerRender), new FrameworkPropertyMetadata(typeof(CustomerRender))); // } protected override void OnRender(DrawingContext drawingContext) { drawingContext.DrawRectangle(Brushes.Bisque, null , new Rect( 0 , 0 , 50 , 50 )); } } 在Window1这个类中修改如下 public partial class Window1 : Window { public Window1() { InitializeComponent()

WPF自定义空心文字

此生再无相见时 提交于 2020-05-03 13:47:59
原文: WPF自定义空心文字   首先创建一个自定义控件,继承自FrameworkElement,“Generic.xaml”中可以不添加样式。   要自定义空心文字,要用到绘制格式化文本FormattedText类。FormattedText对象提供的文本格式设置功能比WPF提供的已有文本控件提供的相应功能更为强大。调用FormattedText构造函数,可以传入相应的参数,得到我们想要的文本样式。使用 MaxTextWidth 属性可以将文本约束为特定宽度。 文本将自动换行,以避免超过指定宽度。 使用 MaxTextHeight 属性可以将文本约束为特定高度。 超过指定高度的文本将显示一个省略号“…”。   接下来重写OnRender方法,在方法体中调用DrawingContext对象的DrawGeometry方法即可完成文本的绘制工作。 1 public class OutlinedText : FrameworkElement, IAddChild 2 { 3 /// <summary> 4 /// 静态构造函数 5 /// </summary> 6 static OutlinedText() 7 { 8 DefaultStyleKeyProperty.OverrideMetadata( typeof (OutlinedText), new

Linux-vim

◇◆丶佛笑我妖孽 提交于 2020-05-01 21:41:41
6. vim 本章同步视频: https://edu.51cto.com/sd/e4874 6.1 vi 与vim l 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在; l 很多个别软件的编辑接口都会主动呼叫 vi (例如未来会谈到的 crontab, visudo, edquota 等指令); l vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计; l 因为程序简单,编辑速度相当快速。 本章同步视频: https://edu.51cto.com/sd/e4874 6.2 vim 的使用 6.2.1 vim 的三种模式 基本上 vi 共分为三种模式,分别是『一般指令模式』、『编辑模式』与『末行命令模式』。这三种模式的作用分别是: 1.一般指令模式 (command mode) 以 vi 打开一个档案就直接进入一般指令模式了(这是默认的模式,也简称为一般模式)。在这个模式中,你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整列』来处理档案内容,也可以使用『复制、贴上』来处理你的文件数据。 2.编辑模式 (insert mode) 在一般指令模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的!要等到你按下『i, I, o, O, a, A, r, R

用canvas实现红心飘飘的动画效果

偶尔善良 提交于 2020-05-01 03:01:50
两周前,项目里需要实现一个红心飘飘的点赞效果。抓耳挠腮了老半天,看了几篇大佬的文章,终于算是摸了个七七八八。不禁长叹一声,还是菜啊。先来看一下效果:( 传送门进去点一波 ) 一、Bezier曲线运动轨迹 其实用大白话描述一下需求就是让一个红心图片沿着贝塞尔曲线的轨迹走,然后边走边消失。核心在于得到贝塞尔曲线上的一系列点。本文不会讲解贝塞尔曲线的原理,因为大佬们已经讲过了,而且讲的比我好。参考文章如下: 用canvas绘制一个曲线动画——深入理解贝塞尔曲线 bezierMaker.js——N阶贝塞尔曲线生成器 其中第二篇文章讲到了生成二阶和三阶贝塞尔曲线可以使用canvas自带的方法: quadraticCurveTo 和 bezierCurveTo ,而高阶的则先得到曲线上一系列的点,然后顺次连接这些点来拟合高阶的贝塞尔曲线。没错,我们要的就是这一系列的点,有了这些点,就可以控制红心的轨迹了。下面是我基于作者的BezierMarker.js写的一个demo,可以直观地看出高阶贝塞尔曲线上的点: <iframe height='369' scrolling='no' title='XyWZXj' src='//codepen.io/imgss/embed/XyWZXj/?height=369&theme-id=27057&default-tab=js,result'

Flutter 2020春季更新,你还不来看看?是不是又变了!

自作多情 提交于 2020-04-30 11:03:13
谷歌 Flutter 项目的工程师、产品经理、UX 研究人员、技术撰稿人和开发关系工程师在过去几个月为这个项目付出了大量汗水和努力。他们在各种限制条件的制约下,使用各种公开可用的工具继续开发 2020 年的 Flutter 春季更新。如今,这一季度的更新已经准备就绪了。 Flutter 的现状和数据 Flutter 的使用率仍在快速增长当中。自它初次发布以来已经过了 16 个月时间,有超过 200 万开发人员用过了 Flutter。虽然行业在 2020 年遇到了前所未有的局面,但在 3 月份 Flutter 依旧获得了 10% 的环比增长,并且每月活跃的开发人员数量有将近 50 万。 其他一些有趣的统计数据: 60%的 Flutter 开发人员使用 Windows 开发,27%的开发人员使用 macOS,13%的人员使用 Linux。 有 35%的开发人员为初创公司工作,26%的开发者为企业开发人员,19%则是个体经营者,还有 7%的用户为设计机构工作。 78%的 Flutter 开发人员使用稳定版渠道,11%的用户使用 Beta 版,11%的用户使用 dev 或 master 版。 Flutter 使用量排名前五的地区分别是印度、中国、美国、欧盟和巴西。 谷歌 Play 商店中大约发布了 50,000 个 Flutter 应用,仅在上个月就上传了 10,000 个。

Qt如何在QTabWidget上绘图

≡放荡痞女 提交于 2020-04-28 07:06:31
  Qt绘图事件必须在paintEvent事件下绘图,这样导致我们在向Qt设计师界面上拖拽的控件绘图时,造成了很大的麻烦。 我们不能在拖拽的控件上写paintEvent函数,但是可以自定义一个类,继承某一个控件,在里面写绘图事件函数,但是这个非常麻烦, 此时我们需要借用Qt事件过滤器函数eventFilter(QObject * watched, QEvent * event) 在Qt助手上,我们可以查看该函数,并且有该函数的示例说明: Qt帮助文档的示例代码: 这里需要说明的是,如果你想调用Qt事件过滤函数这一行代码必不可少: 1 ui->tab1->installEventFilter( this ); 笔者将放入自己写的部分代码: 1 bool MainWidget::eventFilter(QObject *watched, QEvent * event ) 2 { 3 if (watched == ui->DrawCircuit && event ->type() == QEvent::Paint) 4 DrawCircuitPaint(); 5 return QWidget::eventFilter(watched, event ); 6 } 7 void MainWidget::DrawCircuitPaint() 8 { 9 QPainter painter(ui-

《C# GDI+ 破境之道》:第一境 GDI+基础 —— 第三节:画圆形

喜你入骨 提交于 2020-04-27 06:17:18
有了上一节画矩形的基础,画圆形就不要太轻松+EZ:)所以,本节在画边线及填充上,就不做过多的讲解了,关注一下画“随机椭圆”、“正圆”、“路径填充”的具体实现就好。与画矩形相比较,画椭圆与之完全一致,没有任何特别之处。 在画矩形时,我们使用: System.Drawing.Graphics.DrawRectangle(Brush brush, Rectangle rect); System.Drawing.Graphics.FillRectangle(Brush brush, Rectangle rect); 在画圆形时,我们使用: System.Drawing.Graphics.DrawEllipse(Brush brush, Rectangle rect); System.Drawing.Graphics.FillEllipse(Brush brush, Rectangle rect); 看到了吧,就换了个方法名,参数连名都没换:) 所以,了解了如何画矩形,画圆形就是自然掌握的了。 本节就不多费口舌重复了: 1 namespace MikeWare.GdiPlus.Ellipses 2 { 3 using System; 4 using System.Collections.Generic; 5 using System.Drawing; 6 using System