Qt实现2D绘图

2023-10-26

一、介绍

Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainterQPaintDeviceQPaintEngine这三个类。其中QPainter用来执行绘图操作;QPaintDevice提供绘图设备,它是一个二维空间的抽象,可以使用QPainter在其上进行绘制;QPaintEngine提供了一些接口,可以用于QPainter在不同的设备上进行绘制。

二、绘制一条直线

1.新建Qt Gui应用,项目名称为painter_1,类信息界面不用修改,即类名为MainWindow,基类为QMainWindow

2.在mainwindow.h文件中添加重绘事件处理函数的声明:

protected:
    void paintEvent(QPaintEvent *);override;

所有的绘制操作都要在这个函数里面完成。

3.下面到mainwindow.cpp文件中先需要添加头文件包含:

#include <QPainter>

然后添加该函数的定义:

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    QPen pen;
    pen.setColor(QColor(Qt::blue)); //设置笔颜色
    pen.setWidth(4); //设置笔宽度
    painter.setPen(pen); //设置为要绘制的笔
    painter.drawLine(QPoint(0, 0), QPoint(100, 100));//画线

}

这里首先为该部件创建了一个QPainter对象,用于后面的绘制。然后使用drawLine()函数绘制了一条线段,线段的起点为(0, 0),终点为(100, 100) ,这里的单位是像素。效果如下图所示。

三、画笔与画刷

我们将paintEvent()函数的内容更改如下:

void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    QPen pen; //画笔
    pen.setColor(QColor(255, 0, 0));
    QBrush brush(QColor(0, 255, 0, 125)); //画刷
    painter.setPen(pen); //添加画笔,绘制出矩形框
    painter.setBrush(brush); //添加画刷,给矩形上色
    painter.drawRect(50, 50, 200, 100); //开始绘制矩形
}

运行

 

画笔还有许多其他的设置,可以查看该类的帮助文档。例如,可以使用pen.setStyle()来设置画笔样式,可用的画笔样式如下图所示。

画刷也有很多其他设置,这个也可以查看其帮助文档。在Qt中为画刷提供了一些可用的样式,可以使用setStyle()函数来设置。如下图所示。

 

 四、绘制弧线

我们将paintEvent()函数更改如下: 

void MainWindow::paintEvent(QPaintEvent *)
{
    QRectF rectangle(10.0, 20.0, 80.0, 60.0); //矩形
    int startAngle = 30 * 16;     //起始角度
    int spanAngle = 120 * 16;   //跨越度数
    QPainter painter(this);
    painter.drawArc(rectangle, startAngle, spanAngle);
}

 

 

 参考:

第11篇 2D绘图(一)绘制简单图形 · Qt 快速入门系列教程

QPainter详解_友善啊,朋友的博客-CSDN博客_qpainter

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt实现2D绘图 的相关文章

  • Qt 和 Google 地球 API

    是否可以使用 Google Earth 在 Qt 中开发应用程序 例如 我想在我的应用程序中通过 QtGL 将地球 如谷歌地球 显示为球体 很明显 您可以在 Qt 中使用 google Earth api 我想分享一个秘密 Google E
  • 如何停止线程 - Qthread

    我必须在按下两个不同的按钮时启动 停止线程 请指出我的代码是否正确 我是否错过了 connect 调用中的某些内容 Problem我面临的是 在我的线程上调用 quit 后 然后我等待我的线程完成 但在线程上调用 wait never re
  • Qt Signal/Slots 发送完整结构

    我正在尝试通过两个线程之间的信号 槽发送一个结构 我的信号 槽已正确连接 并且我已经能够发送包含部分数据的 QString 但现在我需要发送整个数据 而结构似乎是最明智的 但是 当我尝试时 信号未发送 接收 问题似乎仅与发送 接收结构 前后
  • 没有什么可以帮助解决 Qt 中的“对 vtable 的未定义引用”

    我无法构建此错误 未定义对 CustomUndoStack 的 vtable 的引用 这是代码 class CustomUndoStack public QObject Q OBJECT public int main int argc c
  • 警告似乎指向不同的对象地址

    我正在使用 PySide 当我尝试将电子表格设置为某个小部件时收到警告 09 18 14 48 54 107 WARNING D 0x7ff4a0074650 qt Could not parse stylesheet of widget
  • 将 qDebug 重定向到 QTextEdit

    我想用qInstallMessageHandler handler 重定向qDebug to QTextEdit 我在类中定义了一个处理函数 void Spider redirect QtMsgType type const QMessag
  • Qt 样式表:无法使用 ID 选择器

    我正在学习使用 Qt 样式表向我的应用程序添加不同的样式 我在网上查看了 Qt 文档 其中说你可以使用名为ID Selector可以将主题应用于某些对象 这就是我实现此功能的方式 QPushButton button color red 但
  • Qt Ui 命名空间

    命名空间有什么意义Ui这是Qt自动生成的吗 这两个命名空间相同吗 在第一个中 其中包含 MainWindow 类的前向声明ui MainWindow h为什么它没有声明为class Ui MainWindow 编译器如何知道 MainWin
  • 如何在使用 QSS 悬停父 QFrame 时设置子 QLabels 的颜色?

    我试图使用样式表设置 QFrame 内 2 个标签的悬停状态颜色 但无论是否存在实际悬停 框架都会采用悬停状态 See screenshot 我有一个带有 QLabels 的 QFrame 我将默认颜色设置为绿色和紫色 当我将鼠标悬停在 Q
  • 如何以编程方式在 qml 中渲染 vtk 项目?

    到目前为止 我了解到我们在 QML 中有两个线程 我们的主应用程序线程和我们的 场景图 线程 http doc qt io qt 5 qtquick visualcanvas scenegraph html http doc qt io q
  • 无法在 mac osx 上的 QT 中创建新项目

    过去几天我一直坚持这个问题 我已经安装了 QT 4 8 并且也安装了库 但是当我开始创建一个新项目时 我只能选择使用 CMake 创建一个普通的 C 项目 我没有使用自动 qmake 的选项 我不知道为什么 如果有人可以帮忙 我们将不胜感激
  • 如何在 Qt 5.3 中将 QByteArray 转换为字符串?

    我正在使用一些函数来转换QVector s to QByteArray s 例如 QByteArray Serialize serialize QVector
  • 如何为列表中的每个元素创建一个按钮并将其放在滚动区域中?

    我有一个列表 每次用户打开文件时都会获取一个元素 我需要创建一个带有文件名 列表中的元素 的按钮 每次将该文件附加到列表中时 并将该按钮放入滚动区域 问题是我总是只有一个按钮 只是更改了名称 filenames def addfiles f
  • QList、QVector 或 std::vector 多线程使用

    我希望两个线程像这样工作 第一个线程会将值附加到向量 第二个线程将通过索引对元素进行只读访问 我可以在第二个线程开始读取之前创建互斥体并进行深度复制 但是这种方式真的很慢 如何在没有互斥体的情况下进行此操作 这里 STL向量和线程安全 ht
  • QNetworkManager 默认情况下是否接受压缩回复?

    我在用Q网络管理器 https doc qt io qt qnetworkaccessmanager html从服务器获取文件 但是我不知道文件在传输过程中是否使用标准 gzip 压缩进行压缩 如果不是 如何让它们下载压缩文件 我该如何去检
  • 错误“标记不是预处理器子表达式中的有效二元运算符”

    如果我构建并运行一个项目 基本上是由 Mac OS 10 6 上的 Qt 框架生成的存根 我会得到以下错误输出 Users home Qt5 0 1 5 0 1 clang 64 include QtCore qisenum h 53 Er
  • QT布局,如何使水平布局中的小部件向下移动一行而不是溢出窗口

    现在我有一个 QHBoxLayout W W W W W W 我将尺寸调整得更小 得到 W W W W lt gt 我想要 下划线是黑色空间 W W W W W W 我不确定哪种布局可以做到这一点 有人有主意吗 KDE 设置应用程序可以满足
  • Qt 捕获按下的键

    我想到写原始蛇 我有一个窗口 程序可以在其中绘制随机线条 但我想不出如何捕捉按下的键来改变画线的方向 class QUpdatingPathIte public QGraphicsPathItem void advance int phas
  • 由于 QCoreApplication 事件循环,QThread 永远不会退出

    Problem 所以我有一个 CommandRetriever 类来保存一些命令 并且should在不同的线程上执行这些命令 class CommandRetriever public CommandRetriever CommandRet
  • 如何设置 QTableView 中特定单元格的线条样式?

    我正在使用 QT GUI 我正在使用 QTableView 实现一个简单的十六进制编辑控件 我最初的想法是使用一个有十七列的表格 表的每一行都有 16 个十六进制字节 然后在第十七列中显示该数据的 ASCII 表示形式 理想情况下 我想编辑

随机推荐

  • 后台管理页面,jqGrid框架使用

    之前做后台管理页面是用的 jquery LayUI 样式什么的 分页表格啊 表单之类的全是LayUI搞定 不过现在觉得 LayUI还是有点混乱 然后最近在做一个新的后台管理页面 是用的 jquery jqGrid bootstrap fa
  • weblogic 任意文件上传漏洞复现(CVE-2018-2894)

    weblogic 任意文件上传漏洞复现 CVE 2018 2894 漏洞介绍 WebLogic管理端页面 ws utc begin do ws utc config do下可上传任意getshell 复现环境 vulhub的docker环境
  • 可以新建文本的管理器_「通达信」自定义数据管理器的制作方法

    自定义数据管理器制作的数据可以实现在板块中 K线主图上显示我们制作的数据 对于记性不好的股友起到很好的提醒作用 非常使用 譬如下图中在板块中显示你自定义的数据 调出路径 功能 公式系统 自定义数据管理器 如下图 打开 自定义数据管理器 面板
  • Java注解:Java注解的基本认识

    Java的注解从1 5就有了 算不上新特性 应该算是 老特性 基本业务代码写的时候也可以说是 最熟悉陌生人 我们最起码会经常用到spring的注解来开发 比如说我们定一个 service来作为我们处理逻辑 实现服务接口的 但是可能会对自己使
  • 9 万字 208 道 Java 经典面试题总结 (附答案), 看到就是赚到

    前言 最近有很多粉丝问我 有什么方法能够快速提升自己 通过阿里 腾讯 字节跳动 京东等互联网大厂的面试 我觉得短时间提升自己最快的手段就是背面试题 最近总结了Java常用的面试题 分享给大家 希望大家都能圆梦大厂 加油 下面篇幅较长 有需要
  • rosserial_arduino的安装及使用

    本文主要是使用rosserial arduino包 可以通过msp430launchpad for arduino IDE直接使用ROS 此ide和audrino ide 的使用方法大同小异 rosserial提供了一个通信协议 它通过ar
  • matlab pcacov排序,matlab中pcacov这个命令的作用???

    满意答案 5a3d010 2013 09 12 采纳率 43 等级 12 已帮助 16369人 pcacov Principal components analysis PCA using the covariance matrix Syn
  • JS中原型对象中的constructor的作用?

    最近被同事问道一个问题 function Father this color red green function Child this test 1 Child prototype new Father let instance new
  • Linux内核配置——menuconfig

    1 menuconfig介绍 menuconfig的作用是提供一个图像化的界面去配置内核 也就是修改 config文件 其实你直接去修改 config文件 不用menuconfig也是可以的 但是 config里的配置项太多了 靠人根本记不
  • Maven 设置仓库地址

    修改本地仓库地址 maven 用来管理我们的 Java 第三方库 我们需要设置仓库的本地地址来存放这此第三方库 打开 Maven 目录下的配置文件 apache maven 3 5 0 conf settings xml 找到 标签
  • 光纤信号衰减的原理及分析

    光纤信号衰减是指随着光信号在光纤中传输的距离增加 光信号的强度逐渐减弱的现象 光纤信号衰减的原理主要包括以下两个方面 1 光纤的损耗 光纤在传输过程中会出现一定程度的损耗 主要包括以下几种 1 吸收损耗 光信号在传输过程中会被光纤材料吸收
  • js的FileSaver.saveAs()方法:监听保存进度,进度条等方法

    在使用FileSaver saveAs保存表格到本地时 如果想要获取导出 保存进度可以如下操作 FileSaver js的saveAs 方法是一个异步操作 它将文件保存到用户设备上 在调用saveAs 方法后 可以通过使用回调函数 Prom
  • 【SSM】【4】前端后端数据流转

    前后端数据流转图 业务流转图 前端控制器接受用户请求响应 doJsonRequest ursuser login json json function data if getUrlParam session 1 history back e
  • 最新版 phpstudy V8.0如何禁止或允许站点目录列表显示

    phpstudy V8 0如何禁止或允许站点目录列表显示 localhost下显示文件目录 如何在浏览器中打开 最新版phpstudy V8 0 的文件目录 如果你像我一样是小白 这篇文章对你或许有用 1 当你删除了phpstudy pro
  • 《数据库系统内 幕》事务恢复与处理

    数据库系统内幕 章五 缓冲区管理 页缓存 回收 锁定页 页置换策略 同os中的置换策略 恢复 检查点 steal和force策略 不太理解 要回看 并发控制 异常 专栏 数据库系统内 幕 存储引擎 数据库系统内 幕 事务恢复与处理 数据库系
  • 2022Java笔试题选择题整理(附答案解析)走过路过不要错过了喂!

    2022Java笔试题选择题 一 个人主页 编程ID 个人简介 大家好 我是编程ID 一个想要与大家共同进步的程序员儿 欢迎大家 这里是CSDN 我总结知识的地方 欢迎来到我的博客 望能帮到各位想要找工作或者提高自己的小伙伴儿们 如果有什么
  • 将无序数列升序排列,并输出排列结果和排列后的下标

    include
  • mysql驱动协议之loadbalance和replication

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 背景 偶然下和朋友聊到了mysql多节点集群架场景 对应我们各系代码如何去使用它 牵扯到mysql的驱动包中已经支持的策略 发现这块的概念有些模糊 索性就梳理了一番留着后用
  • 如何防止mq的消息丢失

    分为两种情况 1 主要在消费方 当消息从mq传到消费者时 消费者可能消费消息失败 这时mq中的消息已经自动删除了 导致消息的丢失 需要使用ack机制来保证消息不会丢失 当消费者从mq中拿到消息时 这个消息在mq中不删除 而是消费者对消息进行
  • Qt实现2D绘图

    一 介绍 Qt中提供了强大的2D绘图系统 可以使用相同的API在屏幕和绘图设备上进行绘制 它主要基于QPainter QPaintDevice和QPaintEngine这三个类 其中QPainter用来执行绘图操作 QPaintDevice