painter

Qt自定义控件之仪表盘2--QPaint绘制仪表盘

那年仲夏 提交于 2020-08-04 10:06:13
0、前言 前面一篇文章写道了仪表盘的特点,实现了一个贴图的仪表盘,属于低配版本的仪表盘。 主要是有任何改动时候就需要重新设计图片,不能适配不同控件大小,即使让它自由拉伸,但仪表盘放大缩小时候显示效果会变差。这篇文章设计了一个自己绘制的仪表盘,有背景表盘,刻度线、刻度值,指针,以及动态运行效果。 1、demo顶层设计 设计2个控件,1个widget提升为Mydial仪表盘控件,一个滑动条控件,来测试仪表盘指针旋转效果用。 代码调用,绑定滑动条信号到仪表盘的槽函数即可。 #include " widget.h " #include " ui_frmwidget.h " #include <QDebug> Widget::Widget(QWidget * parent) : QWidget(parent) , ui( new Ui::Widget) { ui ->setupUi( this ); connect(ui ->horizontalSlider, &QSlider::valueChanged, ui->dial, & MyDial::valueChanged); } Widget:: ~ Widget() { delete ui; } 2、绘制仪表盘 绘制背景图,绘制表盘圆圈。 void MyDial::drawBg(QPainter * painter) { int r =

28.QT-QPainter介绍

ε祈祈猫儿з 提交于 2020-07-27 04:03:40
介绍 可以在 QPaintDevice类 上绘制各种图形 QPaintDevice类 表示QPainter的绘图设备(画布) QpaintDevice子类有QImage、QOpenGLPaintDevice、QWidget 等 所以, QPainter可以在 QImage 、 QOpenGLPaintDevice 、 QWidget 上进行绘制图形 QPainter只能在类对象的 paintEvent()函数 中绘制图形 QPainter类的成员角色有: QPen : 用于绘制几何图形的边缘,由颜色,宽度,线风格等参数组成 QBrush : 用于填充几何图形的调色板,由颜色和填充风格组成 QFont : 用于文本绘制 QPixmap : 绘制图片,可以加速显示,带有屏幕截图,窗口截图等支持,适合小图片 QImage : 绘制图片,可以直接读取图像文件进行像素访问,适合大图片 QBitmap : QPixmap的一个子类,主要用于显示单色位图 QPicture : 绘图装置,用于记录和重播Qpainter的绘图指令 具体参考: https://blog.csdn.net/cloud_castle/article/details/26256663 QPainter基础图形绘制相关函数: 绘画圆弧drawArc QPainter painter( this ); painter

Qt开源作品30-农历控件

拥有回忆 提交于 2020-07-24 21:29:36
一、前言 农历控件在国产linux中必备的控件之一,毕竟要适应国人的习惯,你看win10系统的日历,现在点开来直接就有农历在上面,非常方便人性化,所以在很多用Qt做的项目中,也有农历控件的应用场景,而Qt自带的日历控件比较简单,仔细看过源码的人也只知道,其实就是一堆微调框,下拉框,表格组成的,于是打算借用此方法造一个农历控件,本控件的算法是倪大侠提供的,个人测试下来还是没有问题的,造这个农历控件最大的难点是如何根据日期计算农历时间,再加上一些农历的节气之类的,这个网上估计也有很多的算法参考。 主要功能: 可设置边框颜色/周末颜色/角标颜色/农历节日颜色 可设置当前月文字颜色/其他月文字颜色/选中日期文字颜色/悬停日期文字颜色 可设置当前月农历文字颜色/其他月农历文字颜色/选中日期农历文字颜色/悬停日期农历文字颜色 可设置当前月背景颜色/其他月背景颜色/选中日期背景颜色/悬停日期背景颜色 可设置三种选中背景模式,矩形背景+圆形背景+图片背景 可直接切换到上一年/下一年/上一月/下一月/转到今天 可设置是否显示农历信息,不显示则当做正常的日历使用 支持1900年-2099年范围 很方便改成多选日期 二、代码思路 void LunarCalendarItem::paintEvent(QPaintEvent *) { //绘制准备工作,启用反锯齿 QPainter painter(this

QTableWidget添加带有复选框的表头

牧云@^-^@ 提交于 2020-05-08 16:29:09
#ifndef SCHECKBOXHEADERVIEW_H #define SCHECKBOXHEADERVIEW_H #include <QtGui> #include <QPainter> #include <QHeaderView> #include <QStyleOptionButton> #include <QStyle> class SCheckBoxHeaderView : public QHeaderView { Q_OBJECT private : bool isChecked; int m_checkColIdx; public : SCheckBoxHeaderView( int checkColumnIndex, Qt::Orientation orientation, QWidget * parent = 0 ) : QHeaderView(orientation, parent) { m_checkColIdx = checkColumnIndex; isChecked = false ; } signals: void checkStausChange( bool ); protected : void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const

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 *

Unity渲染基础

假装没事ソ 提交于 2020-05-01 12:30:57
渲染 1.何为渲染? 所有我们能看到的东西都是需要进行渲染的。 比如:天空盒,场景模型,角色模型,特效...... 如果没有渲染,游戏世界将是一片黑暗。 2.各版本渲染区别 Unity4.X:渲染使用的事AutoDesk的Beast技术; Unity5.X:渲染使用的事Enlighten引擎; Unity5.6后:渲染使用的还是Enlighten引擎,但是有了升级; 3.移动端渲染 移动端的模型大多是使用两张类型的贴图作为渲染的素材: 一张是漫反射贴图,一张是法线贴图。 4.PC主机端渲染 PC主机端(国外的大型单机游戏)大多是真实的模拟现实中的效果来进行渲染的,使用了很多种类型的贴图(Unity的标准着色器中有支持10种贴图类型)。 PBR:基于物理规则的渲染方式。 GI:全局光照,用于模拟 光的互动 和反弹等复杂行为的算法。 核心要点 1.标准着色器 Unity5.X 后提供了两个标准着色器(Shader)。 使用这两个Shader我们可以实现大部分物体的渲染。 2.Lighting面板 主要对场景中的灯光渲染进行统一的设置。 场景灯光分:实时和烘焙。 3.反射探头 主要用于实现模型的反射。 4.灯光探头组 主要用于在烘焙后的场景中模型实时光的效果。 Shader 1.Shader的重要性 shader好比是画家手中的画笔和颜料。如果画家没有了这两样东西后

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-

Mac 设计师必备的设计绘图软件 推荐与下载

主宰稳场 提交于 2020-04-24 15:42:13
Mac设计师必备的设计绘图软件,为广大设计师推荐一些Mac上实用且强大的软件,使用好的软件,事半功倍,设计出精美的作品。 Mac上优秀的设计类软件非常多,绝对不止这几款软件,看看以下内容,希望对你有帮助。 如有更好的设计类软件大家也可以留言推荐哦! 一、Sketch Sketch 是Mac上最强大的移动和网页应用设计工具,已经赶超PS作为首选设计工具了,尤其是在移动应用设计方面,Sketch的优点在于使用简单,学习曲线低,并且功能更加强大易用。 下载地址:https://www.scoee.com/8/sketch-for-mac-52-5-%E4%B8%AD%E6%96%87%E7%A0%B4%E8%A7%A3%E7%89%88?show=8#q8 二、PhotoShop PhotoShop,简称PS,Adobe公司出品,最知名的图片处理和设计工具,这个就不多做介绍了,可以说是装机必备了。 下载地址:https://www.scoee.com/11/adobe-photoshop-ps-cc-2019-0-1-for-mac-%E4%B8%AD%E6%96%87%E7%A0%B4%E8%A7%A3%E7%89%88?show=11#q11 三、Illustrator Illustrator,简称AI,Adobe公司出品,业界标准矢量绘图工具。 下载地址:https://www

Premiere Pro CC2018安装教程

拟墨画扇 提交于 2020-04-24 13:43:19
Premiere Pro CC2018安装教程 下载安装包:去官网下载或者百度PR2018的安装包 解压安装包后,找到Set-up.exe,右键,打开 安装的时候我们需要注册一个账号,点击“获取Adobe ID”;已经有账号的用户可以直接登陆。 我们可以填写自己的邮箱信息和姓名,填写好注册信息后,点击注册。 在邮箱中激活注册的ID 弹出的软件使用许可协议,点击接受 加载完成后会自动打开软件,接着我们点击右上方关闭按钮退出软件。 激活:Premiere Pro CC2018 右击amtemu.v0.9.2-painter打开,第一个选项卡下找到 Adobe Premiere Pro CC2017并选中。 点击注册机右下角的Install,然后会跳出文件资源管理器让你找一个dll文件。如果是默认路径就打开C:\ProgramFiles\Adobe\Adobe Premiere Pro CC 2018,找到后选择软件根目录下的amtlib.dll ,打开。 在注册机里看到OK字样,说明已破解完成。 在开始菜单中点击Adobe Premiere Pro CC2018软件图标 可正常使用Premiere Pro CC2018 解决安装过程中遇到的报错问题 1.安装过程中,不停的弹出软件的接受许可协议,点接受了一直弹出 反复弹出用户许可协议...直接不打开关了。解决方法: 跳过,进入破解步骤.

使用 PyQt5 实现图片查看器

半世苍凉 提交于 2020-04-21 13:14:18
一、前言   在学习 PyQt5 的过程中我会不断地做一些小的 Demo,用于让自己能够更好地理解和学习,这次要做的就是一个图片查看器,主要功能包括打开图片、拖动图片、放大和缩小图片。   最终实现的图片查看器你效果如下:    二、主要步骤   1.显示图片   PyQt5 绘图系统能渲染矢量图像、位图图像和轮廓字体文本。一般会使用在修改或者提高现有组件的功能,或者创建自己的组件,使用 PyQt5 的绘图 API 进行操作。在 Qt 中有 QPainter 类用于执行绘制的操作,绘图由 paintEvent() 来完成,绘图的代码要放在 QPainter 对象的 start() 和 end() 方法之间。   要将图片显示出来,首先是继承 QWidget,然后实现 paintEvent() 方法,主要是使用 drawPixmap() 方法,需要传入 QPixmap 对象并将其绘制出来,绘图的代码如下: 1 def paintEvent(self, e): 2 """ 3 receive paint events 4 :param e: QPaintEvent 5 :return: 6 """ 7 if self.scaled_img: 8 painter = QPainter() 9 painter.begin(self) 10 painter.drawPixmap(self