iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Qt中QPainter与坐标的使用
  • 373
分享到

Qt中QPainter与坐标的使用

2024-04-02 19:04:59 373人浏览 泡泡鱼
摘要

目录一、坐标系统与坐标变换示例二、可缩放图形一、坐标系统与坐标变换 坐标系统 QPainter坐标变换相关函数 分组函数原型功能坐标变换void translate(qreal d

一、坐标系统与坐标变换

坐标系统

在这里插入图片描述

QPainter坐标变换相关函数

分组函数原型功能
坐标变换void translate(qreal dx,qreal dy)坐标系统一定的偏移量,坐标原点平移到新的点
void rotate(qreal angle)坐标系统顺时针旋转-一个角度
void scale(qreal sx,qreal sy)坐标系统缩放
void shear(qrael sh,qreal sy)坐标系统做扭转变换
状态保存与恢复void save()保存painter当前的状态,就是将当前状态压入栈
void restore()恢复上一次状态,就是从堆栈中弹出上次的状态
void resetTransfORM()复位所有的坐标变换

示例

绘制五角星

船舰widget窗口,只重载paintEvent函数

#include "widget.h"
#include "ui_widget.h"
#include <QPalette>
#include <QPainter>
#include <cmath>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setPalette(QPalette(Qt::white));
    setAutoFillBackground(true);
    resize(600,300);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);
    QPainter painter(this);
    QPen pen;                                      //笔
    pen.setStyle(Qt::SolidLine);
    painter.setPen(pen);
    painter.setRenderHint(QPainter::Antialiasing); //抗锯齿

    QBrush brush;                                  //刷子
    brush.setColor(Qt::yellow);
    brush.setStyle(Qt::SolidPattern);
    painter.setBrush(brush);

    //qreal deg = 3.141592*2/5;
    qreal deg = (360/5)*3.141592/180;
    qreal R=100;
    QPoint points[5] = {
        QPoint(R,0),
        QPoint(R*std::cos(deg),-R*std::sin(deg)),
        QPoint(R*std::cos(2*deg),-R*std::sin(2*deg)),
        QPoint(R*std::cos(3*deg),-R*std::sin(3*deg)),
        QPoint(R*std::cos(4*deg),-R*std::sin(4*deg)),
    };
    QPainterPath starPath;

    starPath.moveTo(points[3]);
    starPath.lineTo(points[1]);
    starPath.lineTo(points[4]);
    starPath.lineTo(points[2]);
    starPath.lineTo(points[0]);
    starPath.closeSubpath();

    QFont font;
    font.setPointSize(12);
    starPath.addText(points[0], font, "0");
    starPath.addText(points[1], font, "1");
    starPath.addText(points[2], font, "2");
    starPath.addText(points[3], font, "3");
    starPath.addText(points[4], font, "4");

    painter.setFont(font);
    painter.save();                  //保存
    painter.translate(100,120);
    painter.drawPath(starPath);
    painter.drawText(0,0,"S1");

    painter.restore();              //恢复
    painter.translate(300,120);
    painter.rotate(90);
    painter.scale(0.7,0.7);
    painter.drawPath(starPath);
    painter.drawText(0,0,"S2");


    painter.resetTransform();
    painter.translate(500,120);
    painter.rotate(-90);
    painter.scale(1.05,1.05);
    painter.drawPath(starPath);
    painter.drawText(0,0,"S3");
}

在这里插入图片描述

二、可缩放图形

视口: 绘图设备的任意一个矩形区域的物理坐标,可以只选取物理坐标的一个矩形区域用
于绘图
。视口默认情况下等于绘图设备的整个矩形区。
窗口: 对应于视口的矩形区域,只不过是用逻辑坐标定义的坐标系,窗口坐标的中心在矩
形中心。
使用窗口坐标绘制,不用管实际的物理大小

#include "widget.h"
#include "ui_widget.h"
#include <QPalette>
#include <QPainter>
#include <QLinearGradient>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setPalette(QPalette(Qt::white));
    setAutoFillBackground(true);
    resize(300,300);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    int W = QWidget::width();
    int H = QWidget::height();

    int side = qMin(W,H);
    QRect rect((W-side)/2,(H-side)/2, side,side);  //视口大小
    painter.drawRect(rect);
    painter.setViewport(rect);
    painter.setWindow(-100,-100,200,200);

    QLinearGradient linerGradient(0,0,100,0);     // 渐变
    linerGradient.setColorAt(0,Qt::yellow);
    linerGradient.setColorAt(1,Qt::green);
    linerGradient.setSpread(QGradient::PadSpread); //发散

    painter.setCompositionMode(QPainter::RasterOp_NotSourceXorDestination);
    painter.setBrush(linerGradient);
    for (size_t i=0; i<36; i++) {
        painter.drawEllipse(QPoint(50,0),50,50);
        painter.rotate(10);
    }
}

在这里插入图片描述

 到此这篇关于Qt中QPainter与坐标的使用的文章就介绍到这了,更多相关Qt中QPainter与坐标内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Qt中QPainter与坐标的使用

本文链接: https://www.lsjlt.com/news/145268.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Qt中QPainter与坐标的使用
    目录一、坐标系统与坐标变换示例二、可缩放图形一、坐标系统与坐标变换 坐标系统 QPainter坐标变换相关函数 分组函数原型功能坐标变换void translate(qreal d...
    99+
    2024-04-02
  • HTML5中SVG视窗坐标系与用户坐标系及变换是怎样的
    这篇文章将为大家详细讲解有关HTML5中SVG视窗坐标系与用户坐标系及变换是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。坐标系统SVG存在两套坐标系...
    99+
    2024-04-02
  • Qt使用QPainter实现自定义圆形进度条
    目录一、项目介绍二、项目基本配置三、UI界面设置四、主程序实现4.1 roundprogressbar.h和roundprogressbar.cpp4.2 widget.h头文件4....
    99+
    2024-04-02
  • SVG视窗坐标系与用户坐标系的概念是什么
    这篇文章主要介绍“SVG视窗坐标系与用户坐标系的概念是什么”,在日常操作中,相信很多人在SVG视窗坐标系与用户坐标系的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • maven坐标Dependencies和Exclusions的使用
    目录1、概念介绍2、Dependencies(1)当一个项目A依赖另一个项目B时(2)配置可选依赖的原因(3)示例3、Exclusions(1)当一个项目A依赖项目B(2)示例4、m...
    99+
    2024-04-02
  • Qt中QZXing的编译与使用
    目录0.前言1.编译2.二维码生成3.二维码识别0.前言 zxing 是一个开源的一维/二维条码图像处理库,当前版本为 Java 语言开发: https://github.com/z...
    99+
    2024-04-02
  • Canvas坐标与路径怎么应用
    本篇内容主要讲解“Canvas坐标与路径怎么应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Canvas坐标与路径怎么应用”吧!    ...
    99+
    2024-04-02
  • 怎么使用Qt+GDAL库实现制作经纬度坐标转换工具
    今天小编给大家分享一下怎么使用Qt+GDAL库实现制作经纬度坐标转换工具的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、功...
    99+
    2023-07-06
  • 经纬度转换 | 基于Python的经纬度与xy坐标(屏幕坐标)相互转换(可批量),并在平面坐标系上以特定点为坐标原点重新建立坐标系,输出各点新坐标
    1. 背景——为什么要转换 用的更多的场景是把经纬度转化为xy平面坐标,因为经纬度是方便我们确定地理位置的,我们可以很容易的从地图数据(可利用高德开放平台)上获取某一个地址它的经纬度,但是我们看到的地...
    99+
    2023-10-20
    python 经纬度 坐标转换
  • C#中如何使用DevExpress的ChartControl实现极坐标图
    今天小编给大家分享一下C#中如何使用DevExpress的ChartControl实现极坐标图的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2023-06-29
  • 读取极坐标中的 csv
    问题内容 polars.read_csv 与 polars.read_csv_batched 与 polars.scan_csv 有什么区别? polars.read_csv 看起来...
    99+
    2024-02-09
    延迟加载
  • 使用Python和GDAL给图片加坐标系的实现思路(坐标投影转换)
    ** 使用Python和GDAL给图片加坐标系 ** 假设你已经知道arcgis地理配准(如下图内容),懂一点python。 ** -目的和背景 1.从地图网站获得一张PNG格式...
    99+
    2024-04-02
  • JavaScript使用canvas绘制坐标和线
    本文实例为大家分享了JavaScript使用canvas绘制坐标和线的具体代码,供大家参考,具体内容如下 具体代码如下: <!DOCTYPE html> <ht...
    99+
    2024-04-02
  • C#中使用DevExpress中的ChartControl实现极坐标图的案例详解
    目录背景实现思路参考代码背景 在工控软件的开发中很多业务场景就是使用图表控件展示设备和工艺参数。如下图案例: 实现思路 通常简单的做法是使用图表控件实现,常用的图表控件有开源的Ze...
    99+
    2024-04-02
  • 使用R语言怎么绘制坐标
    使用R语言怎么绘制坐标?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。绘制坐标有时候我们绘制坐标的时候,需要改变坐标轴的定义,我们以日期为横坐标绘制时间序列为例讲解先列举简单的例...
    99+
    2023-06-14
  • 如何使用yolov5输出检测到的目标坐标信息
    找到detect.py,在大概113行,找到plot_one_box                 # Write results                 for *xyx...
    99+
    2024-04-02
  • CSS浏览器的视图与坐标怎么实现
    本篇内容主要讲解“CSS浏览器的视图与坐标怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS浏览器的视图与坐标怎么实现”吧!   像素(Pixel)...
    99+
    2024-04-02
  • Python中如何使用matplotlib绘图建立画布及坐标系
    小编给大家分享一下Python中如何使用matplotlib绘图建立画布及坐标系,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、建立画布import ...
    99+
    2023-06-22
  • ROSTF坐标变换基本概念及使用案例
    目录前言一、ROS中的TF1.监听TF变换2.广播TF变换二、TF常用组件1.tf_monitor2.tf_echo <source_frame> <target_...
    99+
    2023-01-03
    ros tf坐标变换 ros tf ros tf坐标
  • 使用ECharts和Python接口生成极坐标图的方法
    使用ECharts和Python接口生成极坐标图的方法,需要具体代码示例ECharts是一款非常强大、易于使用的开源数据可视化工具,它具有快速、美观、可定制的特点,可以快速地绘制各种图表。ECharts支持的图表类型非常多,包括柱状图、折线...
    99+
    2023-12-17
    Python echarts 极坐标图
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作