当前位置:网站首页>Qt窗口、视口、逻辑坐标、物理坐标
Qt窗口、视口、逻辑坐标、物理坐标
2022-06-10 03:23:00 【opera321】
void Widget::paintEvent(QPaintEvent *)
{
// QPainter painter(this);
// painter.setWindow(-50, -50, 400, 300);// Widget的默认宽高本身就是400x300,这里将窗口界面宽高分别400和300等分,因此宽高比例没变
// painter.setBrush(Qt::green);
// painter.drawRect(0, 0, 20, 20);// 由于宽高比例不变,所以逻辑坐标(0,0)也就是物理坐标的(50,50)
// painter.setWindow(-50, -50, 100, 100);// 这里将宽高分别100等分,因此宽比例为4,高比例为3
// painter.setBrush(Qt::green);
// painter.drawRect(0, 0, 20, 20);// 由于宽高比例变了,所以逻辑坐标(0,0)也就是物理坐标的([50-0]*4,[50-0]*3)
QPainter painter(this);
int side = qMin(width(), height());
int x = (width() / 2);
int y = (height() / 2);
// 设置视口
painter.setViewport(x, y, side, side);// x是200,y是150,视口的物理坐标原点设置为(200,150),宽高设置为300
painter.setWindow(0, 0, 100, 100);// 设置逻辑坐标原点即为物理坐标原点,也即在(200,150)处,宽高分别100等分,因此比例为3
painter.setBrush(Qt::green);
painter.drawRect(0, 0, 20, 20);// 在逻辑坐标(0,0)处,由于宽高比例变了,所以绘图的实际宽高为(20*3,20*3)
}
void Widget::paintEvent(QPaintEvent *)
{
angle += 10;
if(angle == 360)
angle = 0;
int side = qMin(width(), height());
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QTransform transform;
transform.translate(width()/2, height()/2);// 平移坐标系统, 将原点设置到中心处
transform.scale(side/300.0, side/300.0);// 缩放坐标系统,side=300,所以缩放比例为1。加上缩放,绘制的图形大小会随着窗口大小的变化而变化,不加缩放,则绘制的图形大小不变。
transform.rotate(angle);// 旋转坐标系统
painter.setWorldTransform(transform);
painter.drawEllipse(-120, -120, 240, 240);
painter.drawLine(0, 0, 100, 0);
}
边栏推荐
猜你喜欢

Analysis of the meaning of autocorrelation function / autocovariance function in different fields

Why is the denominator of sample variance n-1 (unbiased estimation)?

yum使用总结

纯js 实现图片压缩,并返回file图片信息

Implementation of small functions (III) string segmentation contents in brackets

多线程并发

清晨开播近100万人观看,快手知识类主播化身“妇女之友”?

Switch case syntax

signed、unsigne整形在内存的存储

Esp32 intrinsic function / variable cannot jump to definition
随机推荐
The era of bat and faang is over. Who will take over?
Extended Euclidean template + Example
TiDB经验分享01
Sword finger offer 24 Reverse linked list
洛谷 P2678 跳石头
P1516 frog's date (expanding Europe)
Knight Moves
do while for 等关键字
vulnhub之doubletrouble: 1
IDEA同一套代码启动多个服务
Refactoring --inline
Refactoring method --extract method
When the most successful and worst CEO dies, Sony still follows his old path
Online salon | open source show -- Application Practice of database technology
Lua's modules and packages
Basic data types and sizeof understanding
理解IPS和IDS
【比特熊故事汇】X Microsoft Build 2022——微软专家+MVP,技术亮点全解析
Distributed data object: HyperTerminal 'global variable'
清晨开播近100万人观看,快手知识类主播化身“妇女之友”?