Qt之图形(转换)
2023-09-11 14:19:16 时间
QTransform 用于指定坐标系的 2D 转换 - 平移、缩放、扭曲(剪切)、旋转或投影坐标系。绘制图形时,通常会使用。
QTransform 与 QMatrix 不同之处在于,它是一个真正的 3x3 矩阵,允许视角转换,QTransform 的 toAffine() 方法允许将 QTransform 转换到 QMatrix。如果视角转换已在矩阵指定,则转换将导
translate(qreal dx, qreal dy):平移 - 对坐标系沿着 x 轴移动 dx、沿 y 轴移动 dy scale(qreal sx, qreal sy):缩放 - 通过水平的 sx 和垂直的 sy 缩放坐标系 rotate(qreal angle, Qt::Axis axis = Qt::ZAxis):旋转 - 对指定的轴用给定的角度反时针旋转坐标系统 shear(qreal sh, qreal sv):扭曲 - 通过水平的 sh 和垂直的 sv 扭曲坐标系 reset():重置为单位矩阵
painter.setTransform(transform); painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo")); }
C/C++ Qt QChart 绘图组件应用 QtCharts 组件是QT中提供图表绘制的模块,该模块可以方便的绘制常规图形,Qtcharts 组件基于`GraphicsView`模式实现,其核心是`QChartView`和`QChart`的二次封装版。
QTransform 用于指定坐标系的 2D 转换 - 平移、缩放、扭曲(剪切)、旋转或投影坐标系。绘制图形时,通常会使用。
QTransform 与 QMatrix 不同之处在于,它是一个真正的 3x3 矩阵,允许视角转换,QTransform 的 toAffine() 方法允许将 QTransform 转换到 QMatrix。如果视角转换已在矩阵指定,则转换将导致数据丢失。
translate(qreal dx, qreal dy):平移 - 对坐标系沿着 x 轴移动 dx、沿 y 轴移动 dy scale(qreal sx, qreal sy):缩放 - 通过水平的 sx 和垂直的 sy 缩放坐标系 rotate(qreal angle, Qt::Axis axis = Qt::ZAxis):旋转 - 对指定的轴用给定的角度反时针旋转坐标系统 shear(qreal sh, qreal sv):扭曲 - 通过水平的 sh 和垂直的 sv 扭曲坐标系 reset():重置为单位矩阵
先来看基本使用:
这里,我们在从坐标原点 (0, 0) 位置开始,大小为 150 * 150 的区域内,绘制了一张图片。
void MainWindow::paintEvent(QPaintEvent *event) Q_UNUSED(event); QPainter painter(this); // 反走样 painter.setRenderHint(QPainter::Antialiasing, true); painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo")); }
这里,将坐标原点由 (0, 0) 变为 (120, 20)。
void MainWindow::paintEvent(QPaintEvent *event) Q_UNUSED(event); QPainter painter(this); // 反走样 painter.setRenderHint(QPainter::Antialiasing, true); QTransform transform; // 平移 transform.translate(120, 20); painter.setTransform(transform); painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo")); }
rotate() 使用角度技巧表示远近。设置第二个参数为角度的常量值后,可以使用 X 轴、Y 轴、Z 轴技巧。它默认是以原点为中心进行旋转的,如果要改变旋转的中心,可以使用 translate() 函数完成。
painter.setTransform(transform); painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo")); }
scale() 可以进行缩放。
这里,使绘制的图像缩小到原来的一半。
void MainWindow::paintEvent(QPaintEvent *event) Q_UNUSED(event); QPainter painter(this); // 反走样 painter.setRenderHint(QPainter::Antialiasing, true); QTransform transform; // 平移 transform.translate(120, 20); // 旋转 transform.rotate(45); // 缩放 transform.scale(0.5, 0.5); painter.setTransform(transform); painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo")); }
shear() 可以实现图片的扭曲。它有两个参数,前面的参数实现横向变形,后面的参数实现纵向变形。当它们的值为 0 时,表示不扭曲。
void MainWindow::paintEvent(QPaintEvent *event) Q_UNUSED(event); QPainter painter(this); // 反走样 painter.setRenderHint(QPainter::Antialiasing, true); QTransform transform; // 横向扭曲 transform.shear(0.5, 0); painter.setTransform(transform); painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo")); }
C/C++ Qt QChart 绘图组件应用 QtCharts 组件是QT中提供图表绘制的模块,该模块可以方便的绘制常规图形,Qtcharts 组件基于`GraphicsView`模式实现,其核心是`QChartView`和`QChart`的二次封装版。
相关文章
- 【大话QT之十四】QT实现多语言切换
- Qt录音机
- 解决qt程序运行时的cannot create Qt for Embedded Linux data directory: /tmp/qtembedded-0出错情形
- 【QT】QT通过数据封装实现Json结构和数据类之间的相互转换
- 【QT】Qt 给已经开发好的程序快速封装成动态库
- 【QT】Qt项目demo:数据在ui界面上显示,鼠标双击可弹窗显示具体信息
- 【QT】Qt 中 Json 的操作
- 【QT】对于Qt MSVC 2017无法编译的问题解决
- 【应用开发】在Linux下搭建嵌入式Qt交叉编译环境时的笔记(命令记录)
- 基于QT(C++)+SQLite实现(界面)Linux系统下的邮件收发软件【100010541】
- QT基础——QML及其相关的qt模块
- Qt编写雷达模拟仿真工具(模拟点/歼击机/航母/发射导弹/爆炸效果/激光雷达等)
- Qt编写地图综合应用60-覆盖物坐标和搜索
- Qt编写安防视频监控系统65-子模块9数据调试
- Qt开源作品6-通用视频控件
- Qt编写的项目作品18-数据导入导出(xls/pdf)及打印示例
- Qt编写Onvif搜索及云台控制工具
- Qt编写的RTSP播放器+视频监控(android版本)
- ubuntu 交叉编译qt 5.7 程序到 arm 开发板
- Qt之QSS(暗橙色)
- Qt之QFileSystemWatcher
- Qt之进程间通信(TCP/IP)
- QT编译时出现警告 Warning: Class Node implements the interface QGraphicsItem but does not list it in Q_INTERFACES. qobject_cast to QGraphicsItem will not work!
- Qt编程之UI与控件布局
- Qt项目打包发布步骤方式
- Qt resizeEvent 控件居中设置
- QT源码之Qt信号槽机制与事件机制的联系
- 详解 QT 源码之 Qt 事件机制原理