Qt光栅操作:绘制反色文本和反色线条

源码解析2-GUI-绘制引擎(QPainter源码分析 ) Qt GUI 模块中最重要的类是QGuiApplication和QWindow。想要在屏幕上显示内容的 Qt 应用程序需要使用这些。QGuiApplication包含主事件循环,其中处理和调度来自窗口系统和其他来源的所有事件。它还处理应用程序的初始化和结束。QWindow类表示底层窗口系统中的一个窗口。它提供了许多虚拟函数来处理来自窗口系统的事件 ( QEvent ),例如触摸输入、曝光、焦点、击键和几何变化。Qt GUI 模块包含 2D 图形、图像、字体和高级排版的类。使用表面类型QSurface::Ra 阅读详情

使用光栅操作

// 背景色取反
painter.setCompositionMode( QPainter::RasterOp_SourceAndNotDestination );

画笔必须设置为白色

/// 设置画笔用白色(必须为白色)
painter.setPen( Qt::white );
// 绘制线条
painter.drawLine( QPoint(0,0), rect().bottomRight()) ;
// 绘制文字
painter.drawText( rect(), Qt::AlignCenter, "hello raster\nhello qt"  );

效果:取反色的图片和文字、线

取反色的线和文字

Qt 2D绘图之一:基本图形绘制和渐变填充 参考文章链接: Qt 2D绘图之一:基本图形绘制和渐变填充2D 绘图系统如下: 2D 绘图主要是 QPainter、QPaintDevice、QPaintEngine 三个类,主要类的作用(其关系见图示)在QPainter中提供了一些方便的函数来绘制常用的图形,而且还可以设置线条和边框的画笔以及进行填充的画刷。新建Qt Gui应用,项目名称为 myDrawing,基类选择QWidget,类名为Widget。建立完成后,在widget.h文件中声明重绘事件处理函数: 绘制基本图形 在widget.cpp文件 阅读详情

相关推荐

QT图形开发避坑指南:为什么你的PaintEvent绘制的文字总有锯齿?

本文深入探讨了QT图形开发中PaintEvent绘制文字出现锯齿的原因及解决方案。通过分析QPainter的渲染管线,介绍了setRenderHint反走样技术的正确使用方法,帮助开发者提升文字渲染质量。文章还涵盖了高DPI适配、字体微调和离屏渲染等进阶优化技巧,适用于各类QT图形界面开发场景。

weixin_29016315的博客 184

QT 颜色取反

在QT中,有时需要使当前颜色与背景的颜色进行取反,特别是在QGraphics模型中,需要应用到。 如自定义类型的item,需要与背景取反,则需要在paintevent中设置取反颜色和painter属性 painter->setBrush(QBrush(Qt::white)); painter->setCompositionMode(QPainter::CompositionMod...

qq_35359581的博客 3686

Qt中QPainter基础图形绘制技术详解与实战

drawArc()和用于绘制椭圆的一部分,广泛应用于仪表盘、进度环等控件。函数签名:startAngle:起始角度,逆时针方向,单位为1/16°(即16表示1°)spanAngle:跨越角度,正值表示逆时针,负值顺时针虽然内置线型能满足多数需求,但某些专业场景(如工程图纸、医疗波形图)需要特定节奏的虚线。此时需使用。参数pattern是一个交替序列:[画线长度, 空白长度, 画线长度, …],单位为“用户坐标系下的距离”。

weixin_42596011的博客 1032

Qt 图像合成模式(一): Porter-Duff 规则

文章目录1. Qt 图像合成模式(一) Composition_Modes_Demo1.1 官方档案内容摘要1.2 **enum QPainter::CompositionMode**1.3 山寨Qt合成模式图片的代码1.4 **Porter-Duff** 规则1.4.1 Source Over (源覆盖)1.4.2 Clear1.4.3 Destination1.4.4 DestinationAtop1.4.5 DestinationIn1.4.6 DestinationOut1.4.7 Dest

读书笔记 3035

vc实现雷达光栅扫描

基于MFC对话框的雷达搜索目标扇面扫描光栅图像显示。机械扫描雷达是靠雷达天线的转动而实现的一种,而雷达的波束扫描是靠雷达天线的转动实现。

QT+opencv图像点运算,包括图像反色,灰度拉伸,灰度均衡

开发环境为QT5.8+opencv3.2,主要实现了图像点运算,包括图像反色,灰度拉伸,灰度均衡。

Qt 根据背景颜色设置字体颜色

Qt绘制好背景后,文字颜色不对会看不清楚。所以需要根据当前的背景颜色选择合适的文字颜色。

Poseidon's Maserati 733

STM32/GD32以太网开发避坑指南:ZLG EPORTM模块调试实战(含YT8512H配置)

本文针对STM32/GD32平台使用ZLG EPORTM模块进行以太网开发时遇到的常见问题,提供了详细的调试实战指南。重点解析了从传统PHY驱动迁移到YT8512H芯片的核心步骤,包括软件复位延时、RMII时钟配置等关键陷阱,并分享了LWIP集成与稳定性验证的实用经验,帮助开发者高效避坑。

rice5的博客 1160

Pyqt5 在QTextEdit设置多段文本颜色与背景色

QTextEdit 自定义字体颜色 ,背景色。

cftchaoxiaoshu的博客 1554

Windows下的Geant4安装教程

本教程将从0开始展示在Windows下如何安装Geant4,包括各种辅助工具(QT、Cmake、Visual Studio)的下载安装,环境变量的配置,以及example的生成等。

weixin_49065278的博客 4105

AUTOSAR RTE配置实战:从ECU分区到Task映射的完整指南

本文提供了一份AUTOSAR RTE配置的完整实战指南。从创建ECU分区、定义OS任务,到实现Runnable Entity与Task的精确映射,详细解析了每一步的操作要点与常见陷阱。文章结合配置工具界面,旨在帮助开发者高效完成RTE配置,确保系统实时性与数据一致性,是掌握AUTOSAR核心开发流程的实用参考。

weixin_29228203的博客 484

Qt:玩转QPainter序列三(合成模式)

填充图像为黑色,同时在支持 Alpha 通道的图像格式下,该黑色会被设置为完全透明的黑色。: 填充图像为完全透明,通常用于清除图像内容。

m0_71489826的博客 2020

WIFi 开关控制实现-ESP8266 物联网 android studio arduino QT多线程服务器

简介:本例子分硬件和软件两大部分, 软件又分3小部分:1 ESP8266 Arduino 嵌入部分 2 手机APP android studio 3 QT 上位机服务器程序。 总之就是一整套。有些代码会有简单备注说明,非科班出身,写这些代码纯属娱乐,写得很不好,多多包涵。 目的: 手机、被控继电器模块连接家里路由器,通过手机App控制继电器的开与断,可设置三种定时模式,即延时开、工作时间、关闭延时。可以控制单一继电器通断或者同时通断。例如,根据配置,可以控制热水器(双刀控制,主要怕漏电)...

qinyaquan1987的博客 4001

【笔记】QT2D绘图详解(直线,矩形,椭圆,折线,路径,文本)

QPaint绘制函数详解

Ray 3439

Matlab实战:如何用MMG方程预测船舶轨迹(附完整代码)

本文提供了一份基于MMG方程的Matlab实战指南,详细讲解了如何从零构建船舶轨迹预测模型。内容涵盖MMG模型的核心原理、Matlab代码框架设计、动力学函数实现、参数调优与验证方法,并附有完整代码示例,帮助工程师和研究者快速掌握这一船舶操纵性预测的关键技术。

v6b7n8m9q0的博客 518

Redis下载安装与配置(windows)

一、Redis下载 二、Redis安装 三、启动Redis临时服务并测试连接(可跳过) 四、Redis配置

欢迎订阅我的“JAVA全栈开发笔记(全)”专栏,价格优惠,仅需19.9元。 7万+

Qt QPainter 完全指南:从画线到绘制复杂图形

本文介绍了Qt中QPainter的核心原理与应用实践。QPainter作为Qt的2D绘图引擎,采用画家模型设计,通过状态机管理绘制属性,支持坐标变换、裁剪、混合模式等高级功能。文章详细解析了QPainter的绘制流程、坐标系统、基本图形绘制方法(线条、矩形、文本等),以及QPainterPath、Transform等高级特性。同时深入剖析了Qt绘图系统的三层架构(QPainter-QPaintDevice-QPaintEngine)和双缓冲机制。最后通过一个完整的仪表盘控件示例,展示了如何利用QPainte

红军不怕远征难,万水千山只等闲 651

ABB变频器使用PROFINET IO通信模块时的激活方法

ABB变频器使用PROFINET IO通信模块时的激活方法

Robot_PLC_HMI_Automation 2732

NodeGui 之 QPainter CompositionMode 枚举:从混合模式到光栅操作的全量指南

本文以 NodeGui 仓库中自动生成的 API 文档 [compositionmode.md](https://link.gitcode.com/i/c88597e3b763ea0abf59b95ce6bd1cba) 为主体,系统梳理 `CompositionMode` 枚举的全部 38 个成员及其数值定义,并结合仓库中 [QPainter.ts](https://link.gitcode.co

gitblog_00585的博客 347

8.5华为OD机试真题 新系统 - 最长不连续子串 (Java/Py/C/C++/Js/Go)

8.5华为OD机试真题 新系统 - 最长不连续子串 (Java/Py/C/C++/Js/Go)

算法大师! 622

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

QT绘图高级编程实战

QT绘图框架概述QT绘图框架概述QT是一个跨平台的C++图形用户界面应用程序框架,它被广泛用于开发GUI应用程序,也可以用于开发非GUI程序,如控制台工具和服务器。QT框架由挪威Trolltech公司(后被Nokia收购,之后又转手给了Digia,最终由The Qt Company继续开发)创造,并且它支持多种编程语言,包括C++、Python、Perl、Ruby等。

QT性能优化QT原理源码QT界面美化 865

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Qt+OpenCV 实现线条中心线提取(含抗锯齿+畸变矫正)

本文介绍了使用Qt+OpenCV实现线条中心线提取的方法,包含抗锯齿处理和畸变矫正功能。环境配置需Qt 5/6、OpenCV 4.x(含imgproc/imgcodecs/core模块)和Eigen 3.4.0。提供了两种中心线提取方案:一是调用OpenCV ximgproc扩展模块的Zhang-Suen细化算法,二是自定义实现该算法。代码展示了图像预处理(灰度化、二值化、形态学去噪)和细化处理的关键步骤,适用于不同OpenCV配置环境。项目配置需在Qt工程文件中正确设置依赖库路径。

Tanyer的博客 703

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【亲测免费】 SRenderer:一款强大的软件光栅化渲染器

SRenderer:一款强大的软件光栅化渲染器 项目基础介绍及编程语言 SRenderer,由C++精心打造,是一款开源的软件光栅化渲染引擎。此项目由开发者smile-zyk维护于GitHub,致力于提供一个无需硬件加速的图形渲染解决方案。通过高效的算法和简洁的设计,它展现了软件渲染领域的精湛技艺。 核心功能 软件光栅化:实现高效像素填充,利用经典算法如Bresenham's线算法,确保线条绘制...

gitblog_00264的博客 746

QT绘图避坑指南:为什么你的PaintEvent绘制的图形总有锯齿?

本文深入探讨了QT开发中PaintEvent绘制图形出现锯齿的原因及解决方案。通过分析QPainter的默认绘制模式,详细介绍了setRenderHint方法在反走样技术中的应用,帮助开发者优化图形质量与性能平衡。文章还提供了分层渲染、特定形状优化等高级技巧,以及性能调优和常见问题排查方法。

weixin_29007135的博客 296

Qt QPainter与GDI+实时绘制性能实测对比与选型指南

图形渲染是桌面应用开发的核心技术之一,直接影响界面流畅度与CPU占用。面对实时数据看板、图表等高频刷新场景,开发者常纠结于选择Qt自带的QPainter还是Windows原生的GDI+。QPainter作为跨平台绘图抽象层,通过QPaintEngine适配底层设备;GDI+则依托系统原生API,提供与Windows深度集成的绘制能力。两者在抗锯齿、坐标变换、双缓冲等不同维度上表现各异。本文基于实际压测数据,对比分析了它们在实时绘制下的性能瓶颈、稳定性及典型应用场景,帮助开发者根据项目约束与平台需求做出更理性

weixin_33965305的博客 510

QT的Paint 系统

下面对于QT的绘制系统做一个简要说明, 这个系统主要由三部分组成, QPainter, QPaintDevice, QPaintEngine。QPainter 是一个绘制接口类,提供绘制各种面向用户的命令,而QPaintDevice 是一个QPainter绘制的目的地,相当于画布, 而QPaintEngine 是基本绘制命令的具体实现。我们打交道比较多的是 QPainter , 注意对于Win

林小林的烂笔头 1201
上一篇: qt的QTableWidget行数多了以后特别慢
下一篇: Qt使用触屏对图片进行平移和缩放
imatt
博客等级 码龄14年 44粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值