一文带你入门 - Qt绘图QPainter

Qt的QPainter详细介绍 QPainter是Qt框架中的一个类,主要用于在各种设备上进行2D图形绘制,如窗口、位图、打印设备等。它提供了一系列绘图函数,可以实现绘制点、线、曲线、形状、文本、图像以及复杂的绘画操作。使用QPainter创建一个QPainter对象。将QPainter与要绘图的设备(如QPixmapQImage或QWidget)关联起来,通过调用begin()函数。使用QPainter提供的绘图函数进行绘图,如drawLine()drawRect()drawText()等。绘制完毕后,调用end() 阅读详情
AI摘要

本文介绍了Qt绘图相关知识。QPaintEvent是处理绘图事件的重要类,在窗口首次显示、大小改变等情况会触发。QPainter用于屏幕绘画,可画线、图形、文本等。还详细阐述了QPainter画文字、线、矩形、椭圆、弧形、扇形的步骤和方式。

QPaintEvent绘图事件:

QPaintEvent 是 Qt 框架中一个重要的事件类,专门用于处理绘图事件。当 Qt 视图组件需要重绘自己的一部分时,就会产生 QPaintEvent 事件。这通常发生在以下几种情况:


1. 窗口第一次显示时:当窗口或控件第一次出现在屏幕上时,系统会生成一个 QPaintEvent 事件,
通知窗口进行自身的绘制。

2. 窗口大小改变时:当用户改变窗口的大小时,窗口的内容通常需要重新绘制以适应新的尺寸。

3. 窗口部分被遮挡后又重新显示时:如果窗口被其他窗口遮挡,然后又重新露出来,被遮挡的部分通常需要重新绘制

4. 手动请求重绘:通过调用 QWidget 的 update() 或 repaint() 方法,可以手动触发重绘事件。
在 Qt 应用程序中,通常通过重写 QWidget 的 paintEvent(QPaintEvent *) 方法来处理绘制逻辑。


根据上上内容,调用 update() 和 repaint() 都能导致绘图事件的发生,鼠标指针进入/离开控件也会发生绘图事件

//设置定时器,每秒repaint()一次,发生一次绘图事件:

    ui->setupUi(this);
    timer = new QTimer(this);
    connect(timer,&QTimer::timeout,this,[=](){
    //update();
    repaint();
    });
    timer->setInterval(1000);
    timer->start();


QPainter用法示例:


QPainter 是 Qt 库中用于在屏幕上进行绘画的类。它提供了各种绘制功能,比如画线、画图形、画文本等。
以下是一些基本的用法示例:


 初始化 QPainter:首先,您需要一个 QPaintDevice ,比如一个 QWidget 或 QPixmap ,然后使
用它来初始化 QPainter 对象。

QPainter painter(this); // 假设在 QWidget 的子类中

设置画笔和画刷:您可以设置画笔(用于描边)和画刷(用于填充)的颜色、样式等。


painter.setPen(Qt::blue); // 设置画笔颜色为蓝色
painter.setBrush(Qt::yellow); // 设置画刷颜色为黄色

绘制图形:使用 QPainter 的方法来绘制线条、矩形、圆形、文本等。


painter.drawLine(10, 10, 100, 100); // 画线
painter.drawRect(10, 10, 100, 100); // 画矩形
painter.drawText(10, 10, "Hello, Qt!"); // 画文本

结束绘制:完成绘制后, QPainter 对象会在其析构函数中自动结束绘制。
请注意, QPainter 的使用依赖于 Qt 的事件循环,因此通常在 QWidget 的 paintEvent 或者类似的事
件处理函数中使用它。如果您在 Qt 应用程序中使用 QPainter ,请确保您遵循 Qt 的事件驱动机制。


QPainter 画文字:

步骤:

1.实例化QPainter对象

2.设置绘图笔的属性

3.设置会出文字的字格式(体和大小)

4.开始绘制文字(可以指定绘制位置,绘制大小,对齐方式,绘制文字内容(中文/英文都可以))

绘制实例

//触发QPainterEvent事件调用这个函数 -> 一运行就会调用

void Widget::paintEvent(QPaintEvent *event)
{

    QPainter painter(this);
    painter.setPen(Qt::blue);
    painter.setFont(QFont("Arial", 20));
    painter.drawText(rect(), Qt::AlignCenter, "Qt中文也能画");
// rect 就是我们当前窗口
    qDebug()<<rect().width()<<','<<rect().height();

//    void
//    drawStaticText(int left, int top, const QStaticText &staticText)
//    void
//    drawText(const QPointF &position, const QString &text)
//    void
//    drawText(const QPoint &position, const QString &text)
//    void
//    drawText(int x, int y, const QString &text)
//    void
//    drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr)

    //参数说明: 从左到右
    //在 (50,100)位置绘制一个大小为(100,100)的文字,并居中显示,文字内容是"Qt"
    painter.drawText(50,100,100,100,Qt::AlignCenter, "Qt");

    //简单粗暴
    painter.drawText(20,30,"mxjun帅");


}

效果演示

QPainter画线:

三种画线方式

1.纯通过两个点的坐标

2. 通过一个线对象

3.通过两个 点对象

//无论那种方式,都遵循-->  两点确定一条直线

    //QPainter 画线:
     painter.drawLine(10,200,300,20); // 绝对坐标绘制,给出起始点的坐标
     painter.drawLine(QLine(20,200,300,10)); //调用QLine 对象绘制 ->  构造方法也是给出两个点的坐标
     painter.drawLine(QPoint(30,200),QPoint(300,40));//调用QPiont -> 构造方式是一个点的坐标, 两个QPoint对象构成一条线即可

效果演示


     QPainter 画矩形:


两种方式画矩形

//参数依次是:  起点坐标x,起点坐标y,矩形宽度,矩形高度
    //    drawRect(int x, int y, int width, int height)
    //起点坐标x,起点坐标y,矩形宽度,矩形高度
    painter.drawRect(400,200,200,100);

//    drawRect(const QRectF &rectangle)
      //构造QRectF 对象 传入四个参数,依次是:起点坐标x,起点坐标y,矩形宽度,矩形高度
      QRectF rectangle(200,100,200,100);
      painter.drawRect(rectangle);

效果演示
 


 QPainter画 椭圆:


 

四种方式画椭圆:

遵循原则: 前面参数指定圆心位置,后面参数指定椭圆的宽度和高度

//除了内切矩形

      painter.drawEllipse(rectangle); //内切与我们画的矩形
      painter.drawEllipse(100,100,100,50); // 参数: 前两个指定圆心位置,后两个参数椭圆的宽度,高度
      painter.drawEllipse(rect().center(),200,100);//在当前矩形的中心点为原型,指定宽度200,高度100
      painter.drawEllipse(QPoint(120,120),50,50);

效果演示

QPainter画弧形:
 

两种方式画弧形

参数形式: 矩形描述(矩形对象 / 4个参数表示恶毒矩形),起始角,伸缩角
       //画 弧形:
      //前面的参数: 弧度中心位置(可以矩形和圆心坐标表示),起始角,伸缩角
       painter.drawArc(rectangle,-30*16,-120*16); // 第一种。前面参数用矩形对象表示
       painter.drawArc(50,100,100,200,45*16,90*16); //前面用四个参数描绘出一个矩形(起点x,y,宽度,高度)

效果演示

QPainter画扇形:

设置画笔样式

    QPainter painter(this);
    QPen pen(Qt::red,5); // 设置画笔颜色 和 宽度
    painter.setRenderHint(QPainter::Antialiasing,true); // 设置抗锯齿,让边缘显得更加光滑
    painter.setPen(pen);

两种方式画扇形

//实现方法和弧形一样

参数形式: 矩形描述(矩形对象 / 4个参数表示恶毒矩形),起始角,伸缩角


       painter.drawPie(rectangle,-30*16,-120*16); // 第一种。前面参数用矩形对象表示
       painter.drawPie(50,100,100,200,45*16,90*16); //前面用四个参数描绘出一个矩形(起点x,y,宽度,高度)

效果演示

Qt—QPainter基本图形绘制详解 1、QPainter 类在小部件和其他绘制设备上执行低级绘制。2、QPainter 提供了高度优化的功能来完成大多数图形GUI程序所需的工作。它可以画从简单的线条到复杂的形状。它还可以绘制对齐的文本和像素图。QPainter 可以对继承 QPaintDevice 类的任何对象进行操作。3、QPainter 与 QPaintDevice 和 QPaintEngine 类一起构成了Qt绘制系统的基础:QPainter 是用于执行绘图操作的类。QPaintDevice 表示可以使用 QPainter 在其上绘制的 阅读详情

相关推荐

QT使用GDI和OpenGL绘图,相比QPainter绘图降低CPU占用率

QPainter在高频绘画的使用CPU占用较高,我们用以下方法解决1、使用GDI绘图,GDI因为是使用GPU绘图,会减少CPU占用GDI在QT中的使用方法:因为QT都是通过repaint和update事件触发paintEvent绘图,其他绘图会被覆盖所以需要以下方法实现GDI绘图一、在需要绘图的Widget构造函数写setAttribute(Qt::WA_PaintOnScreen, true);...

wwwwxhh的专栏 2万+

QPainter详解

QPainter详解

友善啊,朋友的博客 4万+

Qt中重绘事件处理函数paintEvent

在实际开发中,我们可以根据具体需求在paintEvent函数中进行各种绘图操作,例如绘制图表、绘制自定义的几何图形、绘制动画效果等。需要注意的是,paintEvent函数中的绘图操作会在窗口需要被重新绘制时被调用,因此我们应该避免在该函数中进行耗时的操作,以保证窗口的流畅显示。当窗口需要被重新绘制时,系统会自动调用该函数。除了重写QWidget的paintEvent函数,我们还可以在其他继承自QWidget的类中使用paintEvent函数进行绘图操作,例如QMainWindow、QDialog等。

2301_79366106的博客 1446

QPainter:Qt图形渲染引擎

QPainter 是 Qt 的核心绘图类之一,提供了各种方法来画出各种图形和文本。QPainter 类通过与特定设备的 QPainterDevice 对象交互,将二维图形呈现到窗口之上。QPainter 可以与 QWidget 或其他显示设备(如 QImage 或 QPrinter)配合使用,因此您可以在屏幕上轻松地呈现复杂的几何图形和文本。QPainter 的高效性可能会产生混淆,尤其是对新手,但实际上 QPainter 使用了优化的算法,能够快速渲染大部分类型的图形和文本数据。

qq_25549309的博客 3001

【QT】QPainter基本绘图

本文介绍QPainter基本绘图的基础知识。

u011671745的博客 2976

无人自行车平衡控制:最小二乘法动态零点拟合实践

本文探讨了无人自行车平衡控制中动态零点的重要性及实现方法。通过最小二乘法拟合车头角度与ROL值的线性关系,解决了固定零点在转向时导致的稳定性问题。实践表明,动态零点拟合能显著提升系统平衡稳定性并降低能耗。

uran的专栏 660

QT QPainter 绘图

Qt QPainter绘图基础。。。QPaintPath 绘图路线/顺序。。。Qt 中提供了强大的 2D 绘图系统,可以使用相同的 API 在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。

yishuihanq的博客 2656

揭秘Synopsys EDA中的AI黑科技:DSO.ai如何改变传统芯片设计流程

本文深入探讨了Synopsys EDA中的AI黑科技DSO.ai如何革新传统芯片设计流程。通过数据驱动的方法论、功耗优化革命和时序收敛智能加速,DSO.ai显著提升了设计效率和质量,实现了从经验驱动到AI驱动的范式转变。文章还提供了实战指南,帮助团队跨越AI EDA的实施鸿沟。

weixin_29296241的博客 526

Qt 之图形(QPainter 的基本绘图)

Qt 中提供了强大的 2D 绘图系统,可以使用相同的 API 在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。 - QPainter 用于执行绘图操作,其提供的 API 在 GUI 或 QImage、QOpenGLPaintDevice、QWidget 和QPaintDevice 显示图形(线、形状、渐变等)、文本和图像。

青春不老,奋斗不止! 15万+

三维(点云)语义分割概述以及方法总结

语义分割 语义分割需要两部分 classification: 需要全局信息 segmentation:更加依赖全局信息和局部信息 一般的网络结构是: 提特征-特征映射-特征图压缩(降维)-全连接-分类,其实就是encoder-decoder的过程, 比如在二维的的pspnet,fcn等等 0. 三维表示的数据结构 Point cloud 无序性 点云实际上是无序的,比如有8个点云,你放到...

renhaofan的博客 3万+

TC275-AutoSAR实战:Davinci Cfg多核OS配置与调试技巧

本文详细介绍了在TC275芯片上使用Davinci Cfg工具进行AutoSAR多核操作系统配置的实战步骤与调试技巧。内容涵盖从导入arxml文件的常见“坑”开始,到配置Det、EcuC、创建多核OS实例、关联OS应用、创建任务与设置优先级调度,最后分享了利用Det日志、调试器多核视图及处理核间通信与缓存一致性等关键调试方法,旨在帮助开发者高效完成复杂车载ECU软件集成。

weixin_29219189的博客 489

Qt开发技术:Qt绘图系统(二)QPainter详解

Qt开发技术:Qt绘图系统(二) 前话 红胖子,来也! Qt的图形绘制系统,本篇主要介绍绘图类QPainter。 绘图:QPainter类 概述 QPainter类在窗口和其他绘制设备上执行低级绘制。 QPainter提供高度优化的功能来完成大多数图形用户界面程序所需的工作。它能画出从简单线条到复杂形状如饼图和弦等一...

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 5万+

黑猫带你学UFS协议第13篇:UFS初始化详解(Boot Operation)

本文详细解析了UFS设备的初始化过程,包括部分初始化、加载启动代码(可选)和初始化完成三个阶段。重点介绍了如何通过设备描述符和逻辑单元描述符配置引导特性,以及如何从UFS设备加载启动代码。内容适用于嵌入式硬件和存储领域的开发者。

黑猫奥利奥的博客 3555

Qt QPainter绘图

1.QPainter绘图系统 QPainter用来进行绘图操作的类。 QPaintDevice是一个可以使用QPainter进行绘图的抽象二维界面。 QPaintEngine给QPainter提供在不同设备上绘图的接口,QPaintEngine类由QPainter和QPaintDevice内部使用,应用程序一般无需使用QPaintEngine。 绘图设备包括QWidget、QPixmap、QImage等。 2.paintEvent世界和绘图区 QWidget类及其子类是最常用的绘图设备,从QWid

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 7821

YOLOv5/v7/v8/v9/v10/v11/v12/13目标检测结果解析,超w字精读,IoU、GIoU、DIoU、CIoU、EIoU详细解释,精确率、召回率、AP、mAP与P-R 曲线图深度解析

YOLOv5/v7/v8/v9/v10/v11/v12/13目标检测结果解析,超w字精读,IoU、GIoU、DIoU、CIoU、EIoU详细解释,精确率、召回率、AP、mAP与P-R 曲线图深度解析

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1413

Spring Framework 7.002.Spring IoC 容器与 Bean 简介(Introduction to the Spring IoC Container and Beans)

摘要:Spring框架的核心技术包括IoC容器和AOP技术。IoC容器通过依赖注入实现控制反转,提供Bean管理和配置功能。ApplicationContext作为BeanFactory的扩展,增加了企业级特性。文档详细介绍了容器配置、Bean定义、依赖注入、作用域等核心概念,以及基于注解的配置方式。AOP框架支持80%的AOP需求,并可集成AspectJ。此外还涵盖环境抽象、容器扩展点等高级特性,为Java企业应用开发提供全面支持。(150字)

无 213

Qt使用QPainter在子控件上绘图

Qt使用QPainter在子控件上绘图 因为Qt存在事件过滤机制,事件过滤器会将子控件上的绘图事件过滤,因此无法在子控件上使用QPainter进行绘图 如果需要在子控件上使用QPainter,同样需要事件过滤器 事件过滤器 事件过滤器与其他部件不同,它不是一个类,只是由两个函数组成的一种操作 用来完成一个部件对其他部件的事件监视,这两个函数分别是installEventFilter()和eventFilter(QObject *obj, QEvent *ev),都是QObject类中的函数 使用步骤: 安

Wanggj的博客 1万+

手把手教你学simulink(12.10)--设计和仿真一个用于控制飞机纵向运动(高度和速度)的多变量控制系统

飞机的纵向运动控制是航空工程中的一个重要问题,涉及飞机的高度和速度的精确控制。多变量控制系统可以同时控制多个飞行参数,确保飞机在最佳条件下运行。Simulink提供了一个强大的平台,用于建模、仿真和分析动态系统,非常适合设计和测试多变量控制系统。通过本项目的实施,我们成功设计和仿真了一个用于控制飞机纵向运动(高度和速度)的多变量控制系统。该项目展示了从系统建模、控制器设计、仿真验证到结果分析的完整流程,为多变量控制系统的设计提供了有价值的参考。

MHD0815的博客 598

QT使用QPainter绘图

环境:UBUNTU14.04/QT4 简介:     QT的二维图形引擎是基于QPainter类的,QPainter既可以绘制几何图形,又可以绘制像素映射,图像和文字,除此之外还有一些高级功能。     QPainter可以画在“绘图设备上”,如QWidget,QPixmap,QImage或者QSvgGenerator,也可以与QPrinter一起使用来打印文件和创建PDF文档,这意

hao_zong_yin的博客 2万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

QPainter绘图基本使用

简述 QT中与绘图相关的类主要有QPainter和QPaintDevice QPainter:绘制器,用来执行绘图的操作,如绘制线、圆、矩形… 可以类比成在黑板上使用的工具集合,比如尺子、圆规、粉笔… QPaintDevice:绘图设备,是一个抽象出来的绘图设备,实例化有QWidget、Qimage… 可以类比于一块黑板,可以在画圆,直线、矩形、写字… 使用 1、继承QWidget,重写paintEvent方法。 2、在paintEvent函数中创建一个QPainter对象,并将该类指定为父对象。 3、设置

m0_47722349的博客 9330

WINCC7.3破解文件

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

Qt 绘图QPainter < 一 >

QPainter提供了丰富的方法用于在 Qt 应用程序中进行绘图操作。它可以用于绘制基本形状、文本、图像等。可以设置画笔和画刷的属性来调整绘制的样式。QPainter经常与paintEvent事件处理函数一起使用,用于在窗口或其他QWidget派生类上进行绘制。

yw_WillGo的博客 2087

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【嵌入式——QT】QPainter基本绘图

嵌入式-QT-QPainter

weixin_39723539的博客 1693

Qt之图形(QPainter的基本绘图)

简述 Qt 中提供了强大的 2D 绘图系统,可以使用相同的 API 在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。 QPainter 用于执行绘图操作,其提供的 API 在 GUI 或 QImage、QOpenGLPaintDevice、QWidget 和...

weixin_34341229的博客 8541

qt 绘图QPainter

当图片小的情况下,直接用QPixmap进行加载,画图时无所谓,当图片大的时候如果直接用QPixmap进行加载,会占很大的内存,一般一张几十K的图片,用QPixmap加载进来会放大很多倍。QWidget类及其子类是最常用的绘图设备,从QWidget类继承的类都有paintEvent()事件,只需要重定义此事件就行。QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,QImage主要是为图像I/O、图片访问和像素修改而设计的。一般图片大的情况下,用QImage进行加载,然后转乘QPixmap用户绘制。

baidu_16370559的博客 3770

【嵌入式Qt开发入门】如何使用Qt进行绘图——QPainter 绘图

绘图与图表在嵌入式里有的比较多,尤其是图表,我们常在股票里看到的“图表折线/曲线 图/饼状图等”都可以用 Qt 的图表来实现。绘图和图表的内容本章主要介绍绘图和图表的基本操作,以简单的例子呈现绘图与图表的用法,目的就是快速入门绘图与图表,关于绘图与图表详解最好是看 Qt 官方的帮助文档。

cj_lsk的博客 2128

Qt:45---QPainter绘图

一、QPainter简介 QPainter是Qt的二维绘图,得到的图形是不可交互的 画布:一般的绘图设备包括QWidget、QPixmap、QImage等,这些绘图设备为QPainter提供了一个“画布”,QPainter可以在这些设备上进行绘图 QPaintDevice、QPaintEngine类 QPaintDevice是一个可以使用QPainter进行绘图 的抽象的二维界面 QPa...

董哥的黑板报 2868
上一篇: 手把手带你做一个自己的网络调试助手(4) - 优化完善
下一篇: Qt绘图 - 渐变色
mx_jun
博客等级 码龄5年 1605粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值