Qt 使用视口和窗口作图

物理坐标系与逻辑坐标系

绘图设备的物理坐标系是基本的坐标系,通过 QPainter 的平移、旋转等坐标变换可以得到更容

易操作的逻辑坐标系。

物理坐标系也称为视口(viewport)坐标系,逻辑坐标系也称为窗口( window)

坐标系,通过内部的坐标变换矩阵, QPainter 能自动将逻辑坐标变换为绘图设备的物理坐标。

视口

视口是指绘图设备的任意一个矩形区域,它使用物理坐标系。我们可以只选取物理坐标系中的一

个矩形区域来绘图,默认情况下,视口等于绘图设备的整个矩形区域。

定义视口

cpp 复制代码
painter.setViewport(50,0,200,200);

窗口

窗口与视口是同一个矩形区域,但是窗口是用逻辑坐标系定义的,窗口可以直接定义矩形区域的逻辑坐标范围。

cpp 复制代码
void QPainter::setWindow(int x, int y, int width, int height)
painter.setWindow(-50,-50,100,100);

视口和窗口使用例子

初始化

cpp 复制代码
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    int W= this->width();
    int H = this->height();
    int side = qMin(W,H);

定义视口矩形

取长和宽的最小值,作为正方形的边长

cpp 复制代码
    QRect  rect((W-side)/2,(H-side)/2,side,side);
    painter.drawRect(rect);//绘制一个矩形
    painter.setViewport(rect);//设置为视口

设置窗口的坐标系

cpp 复制代码
    painter.setWindow(-100,-100,200,200);//设置窗口的坐标系

设置画笔

cpp 复制代码
    QPen pen;
    pen.setWidth(1);
    pen.setColor(Qt::red);
    pen.setStyle(Qt::SolidLine);
    pen.setCapStyle(Qt::FlatCap);//线端点样式
    pen.setJoinStyle(Qt::BevelJoin);//线的连接点样式
    painter.setPen(pen);

使用窗口坐标系作图

画圆,每10°,通过坐标系的旋转画一个圆,画24个

cpp 复制代码
    for(int i=0;i<24;i++)
    {
        painter.drawEllipse(QPoint(50,0),50,50);
        painter.rotate(10);
    }

结果

总结

  1. 设置了窗口坐标系,按照窗口坐标系作图

2.当窗口的宽度大于高度时,以高度为正方形边长,当高度大于宽度时,以宽度为正方形边长,且图形是自动缩放的。

3.首先定义了一个正方形视口,正方形以绘图设备的长、宽中的较小者为边长。然后定义了窗口,定义的窗口是中心在原点,边长为 200 像素的正方形。

相关推荐
无小道13 分钟前
Qt——事件简单介绍
开发语言·前端·qt
王老师青少年编程42 分钟前
2024年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第3题)
c++·题解·真题·csp·信奥赛·csp-s·提高组
凡人叶枫1 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
CSDN_RTKLIB1 小时前
使用三方库头文件未使用导出符号情景
c++
rainbow68893 小时前
Linux文件描述符与重定向原理
c++
mengzhi啊3 小时前
QUndoView 本质是一个 Qt 界面控件(继承自 QListView),专门适配 QUndoStack
qt
CodeSheep程序羊3 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
编程小白20264 小时前
从 C++ 基础到效率翻倍:Qt 开发环境搭建与Windows 神级快捷键指南
开发语言·c++·windows·qt·学习
深蓝海拓4 小时前
PySide6,QCoreApplication::aboutToQuit与QtQore.qAddPostRoutine:退出前后的清理工作
笔记·python·qt·学习·pyqt
薛定谔的猫喵喵4 小时前
天然气压力能利用系统综合性评价平台:基于Python和PyQt5的AHP与模糊综合评价集成应用
开发语言·python·qt