painter

使用 PyQt5 实现图片查看器

拟墨画扇 提交于 2020-04-21 11:08:24
一、前言   在学习 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

QQuickPaintedItem鼠标精准拾取(pick/select)研究

独自空忆成欢 提交于 2020-03-27 18:14:31
QT C++在2D图形方面已经做的很完善了,在PC端(Windows、Linux和MaC)上都有很好的表现。 QT中的QML特别适合于移动端应用的开发,QML中的一些基本形状类型并不是一一地与Qt C++相对应,但是通过C++可以来扩展QML。 QQuickPaintedItem继承自QQuickItem,提供了使用QPainter API的方法来扩展QML中的2D图形项。 QQuickPaintedItem没有像QGraphicsItem那样提供shape()方法来获取图形项的具体实际形状,但是其包含contains()方法,我们可以间接地结合鼠标操作点来判断是否包含在实际形状范围内。 废话不多说,直接上测试代码: CustomItem.h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #ifndef CUSTOMITEM_H #define CUSTOMITEM_H #include <QQuickPaintedItem> #include <QQuickItem> #include <QMouseEvent> #include <QPainter> class CustomItem : public

教你如何用Qt做透明的窗体,setMask, Opacity

女生的网名这么多〃 提交于 2020-03-23 13:16:57
// In this function, we can get the height and width of the current widget void Widget::resizeEvent(QResizeEvent *) { // Use a bitmap as a mask. A bitmap only has two kind of colors: white(value is 0) // or black(other values). When we use it to set mask, we can see the window at the position // where the color value is 0, and other place will be transparent. QBitmap bitMap(width(),height()); // A bit map has the same size with current widget QPainter painter(&bitMap); painter.setPen(QColor(255,255,255)); // Any color that is not QRgb(0,0,0) is right painter.drawRect(0,0,width(),height()); //

Substance Painter:常用快捷键

こ雲淡風輕ζ 提交于 2020-01-21 00:16:23
为了和Blender体验一致,部分快捷键已修改 《Substance Painter:如何把视图操作改为和Blender一致 》 视图类 命令 快捷键 说明 旋转视图 中键 非默认 平移视图 Shift + 中键 非默认 缩放视图 滚轮 非默认 2D/3D视图 F1 仅2D视图 F3 仅3D视图 F2 切换2D/3D视图 F4 隐藏/显示UI Tab 显示整个模型 F 来源: CSDN 作者: 开发游戏的老王 链接: https://blog.csdn.net/hello_tute/article/details/104047923

Qt 中QPainter 使用中出现的问题

牧云@^-^@ 提交于 2020-01-16 16:29:49
这两天在使用QPainter的过程中出现了一些问题,记录一下。 测试程序很简单,写一个继承自QWidget的类,重载其paintEvent函数进行绘图。 case1: 在paintEvent函数中使用一个临时的painter对象进行绘制。 结果:能够正常绘制。 case2: 在paintEvent函数中动态分配一个painter对象进行绘制。 结果:能够正常绘制。 case3:将Painter声明为一个类的成员变量进行绘制。 结果:不能正常绘制 分析:由于我在初始化m_painter时,用到的是QPainter m_painter(this); 这句代码等于QPainter m_painter,m_painter.begin(this); 但是m_painter.begin()函数只有在paintEvent()函数中调用才是有意义的(Qt中的绘制动作只能在paintEvent()函数中完成) 由于此时begin()函数隐式在构造函数中被调用了,最终倒是绘图动作失效。 试探的解决办法:在用不带参数的构造函数初始化painter,然后再paintEvent函数中利用begin函数为painter绑定对象。 试探的解决方法的结果;窗体先是正常绘制,接着就崩溃了,并报出如下错误: 我原本的思路是:当MyWidget对象析构是,就会自动调用其内部成员变量painter的析构函数

qt自定义控件-圆形通用指示表盘

扶醉桌前 提交于 2020-01-11 06:44:00
一、前言 制作一个圆形仪表盘,此表盘通用各种参数指示,如:温度,速度,压力,等进度相关的类别。 二、环境 qt5.7 MinGW windows8 三、正文 首先 演示一下效果图 表盘采用的是上半圆形表盘,有彩色的渐变条框,这个用QConicalGradient实现,其余的还稍微容易一些, 偶尔水群,听过刘大师一句话非常有道理,只要心中有坐标,万物皆可paint,绘制自定义控件,搞明白坐标是基础的部分,其次 才是想怎么去画想要的图形。 下面话不多说直接把此通用圆形表盘代码带注释简单讲解: 首先是一些必备的参数先声明好,还有一些提供外部修改参数的接口,这个根据自己需求预留,此 控件我暂时只 预留了修改范围和修改标题。 public Q_SLOTS: void setRange(int minValued, int maxValued); //修改范围 void setCurentSpeed(int speed); //设置标题 void setTitle(const QString &titled); private: void drawFrame(QPainter& painter);//绘制边框与背景 void drawNumberIndicator(QPainter& painter);//绘制指示数字 void drawDividing(QPainter& painter);

QMap::remove操作,并不会调用值的析构,跟QTreeWidget同类,需要主动去释放

↘锁芯ラ 提交于 2019-12-10 15:28:18
void test_MapRemvoe() { DBOperator * painter = new DBOperator; QMap<int , DBOperator*> map; map.insert(1, painter); DBOperator * painterOther = map.value(1); qDebug()<<painterOther; map.remove(1); qDebug()<<painterOther; } 15:08:56: Starting E:\Qt_projcet\play\build-play-Desktop_Qt_5_12_2_MinGW_64_bit-Debug\debug\play.exe... 15:10:09: Debugging starts DBOperator(0x1447800) //remove前后地址是一样的 DBOperator(0x1447800) //remove前后地址是一样的 15:10:41: Debugging has finished 来源: https://www.cnblogs.com/azbane/p/12016836.html

Qt编写自定义控件10-云台仪表盘

半城伤御伤魂 提交于 2019-12-07 14:30:48
前言 做过安防视频监控的同学都清楚,在视频监控系统软件上都可以看到一个云台控制区域,可以对球机进行下下左右等八个方位的运动控制,还可以进行复位,一般都是美工作图好,然后贴图的形式加入到软件中,好处是程序简单,界面美工,主要取决于美工的美图能力,缺点是对于各种分辨率的适应性稍微差点,需要不同的图片切图贴图,除非默认做好的是大图自适应看不出差别,可能大部分人所在的公司都是小公司,一般美工人员比较少甚至没有,都需要程序员一人负责,甚至一开始就要考虑到各种分辨率的应用场景以及后期可能的换肤换色等。 之前做过很多自定义控件,大部分都采用了qpainter的形式绘制,有个好处就是自适应任意分辨率,所以思考着这个云台控制仪表盘也采用纯painter绘制的形式,据说纯painter绘制还可以轻松移植到qml中,这又坚定了我用qpainter绘制的决心。所谓心中有坐标系,万物皆painter。 观察云台仪表盘下来,基本上就这几部分组成,圆形底盘,八个角,中间部分按钮,整个的控件的难点就在于八个角的定位,中间部分很好定位,而且八个角不是绝对的位置,都是相对于界面的宽高按照等比例自适应排列的。八个角的鼠标按下要做出对应的反应,发送出对应型号,网上大部分人都是切图或者放置label或者按钮来贴图实现,绑定事件过滤器过滤鼠标按下然后再发出信号。我这里为了提升逼格,直接采用位置坐标计算法。 实现的功能 1

人人都是毕加索!如何巧用AI画出卢浮宫级别的艺术品?

喜你入骨 提交于 2019-12-05 00:01:52
人工智能越来越渗透到我们的日常生活中了。比如之前新闻报道,人工智能产生的艺术品在佳士得(Christie’s)的赞助下登上了世界拍卖的舞台,这不仅仅证明人工智能具有创造性,还可以创作出世界级的艺术品。 想成为艺术家吗?想知道如何利用AI创作艺术吗?如何用人工智能打造卢浮宫级别的艺术品?这里有生成AI艺术的奇妙小工具,人人都是达芬奇!快来开开眼界吧! 国外最受欢迎的 AI 艺术类工具: nway ML——简单,又无需代码的一款AI工具,可以使用机器学习模型创造更多创意艺术品。 Magenta——一个开源研究项目,探索机器学习在创作过程中作为工具的作用。 GANBreeder ——使用 GANBreeder 衍生出两个图像以创建更加新奇的图像。 Processing——灵活的软件速写本和语言,用于学习如何在视觉艺术的背景下进行编程。 包括p5js(Java处理)和Processing.py(Python处理)。 [处理过程不使用AI,而是视觉艺术的绝佳工具]。 ml5.js —— ml5.js 旨在通过互联网让广大艺术家、编程人员和学生群体,可以通过机器学习激发、创作更多创意作品。 音乐/声音类 AI 工具: Magenta Studio ——基于 Magenta 的开源工具和模型,构建的音乐插件合集。 AI Duet ——可以与你一起互动的钢琴演奏。 NSynth Sound

Custom Painter on JProgressBar

匿名 (未验证) 提交于 2019-12-03 08:52:47
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 由 翻译 强力驱动 问题: I'm attempting to change the colour of Progress Bars in my current Swing L&F (I'm using Nimbus at the moment) by using a custom Painter object, but when created these Progress Bars sometimes stick with their original colouring (this change seems to occur randomly). I'm probably missing something simple but I'm stumped, Painter object (and it's invocation below)... import javax . swing . Painter ; import java . awt .*; public class ProgressPainter implements Painter { private Color light , dark ; private GradientPaint gradPaint ;