Qt-QTransform介绍与使用

QTransform是一个用于二维坐标系转换的类。我们知道Qt的坐标系是左上角为原点,x轴向右,y轴向下,屏幕上每个像素代表一个单位,那么,如果我们想要在屏幕上建立自己的坐标系用于绘制,就需要借助QTransform。
在这里插入图片描述
假设我们希望建立的原点坐标在Qt坐标系中为(50,250),并且y轴方向相反,且原x轴一个单位等于现x轴的2个单位,原y轴的2个单位等于现y轴的1个单位,我们可以这样做:

QTransform trans;
trans.translate(50, 250);

translate函数将坐标系向x轴移动50个单位,y轴移动250个单位

qreal xRatio = (qreal)1/2;
qreal yRatio = -(qreal)2/1;
trans.scale(xRatio, yRatio);

scale函数将xy轴放大缩小,比例值为Qt像素值/自定义坐标像素值,1/2表示,1一个原单位值等于现在2个单位值,其中负数表示改变y轴为原来相反方向。测试一下绘制效果

void MainWindow::paintEvent(QPaintEvent *event)
{
   
    QPainter painter(this);
    QPen pen(Qt::blue, 2);
    painter.setPen(pen);
    painter.drawLine(QPoint(-100, 0), QPoint(1000, 0));
    painter.drawLine(QPoint(0, -100), QPoint(0, 1000));

    QTransform trans;
    trans.translate(50, 250);
    qreal xRatio = (qreal)1/2;
    qreal yRatio = -(qreal)2/1;
    trans.scale(xRatio, yRatio);
    painter.setTransform(trans);
    pen.setBrush(Qt::darkGreen);
    painter.setPen(pen);
    painter.drawLine(QPoint(-100, 0), QPoint(1000, 0));
    painter.drawLine(QPoint(0, -100), QPoint(0, 1000));

    pen.setBrush(Qt::darkBlue);
    painter.setPen(pen);
    painter.drawRect(0, 0, 50, 50);
}

在这里插入图片描述
可以看到Qt坐标系(红),自定义坐标系(绿)和自定义坐标系中绘制的矩形,实际为25*100的矩形,且可以发现penWidth宽度在y轴也发生了放大变为4px,x轴penWidth变为1px

相关推荐

  1. QT】QtConcurrent的使用介绍std::thread的区别

    2023-12-19 10:28:03       39 阅读
  2. QTransform 笔记

    2023-12-19 10:28:03       27 阅读
  3. NPM介绍使用

    2023-12-19 10:28:03       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-19 10:28:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-19 10:28:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-19 10:28:03       82 阅读
  4. Python语言-面向对象

    2023-12-19 10:28:03       91 阅读

热门阅读

  1. pnpm-lock.yaml、yarn.lock以及package-lock.json的区别

    2023-12-19 10:28:03       55 阅读
  2. uniapp数据缓存(存储/获取/移出)

    2023-12-19 10:28:03       72 阅读
  3. ubuntu添加路由

    2023-12-19 10:28:03       58 阅读
  4. python爬虫---urllib

    2023-12-19 10:28:03       62 阅读
  5. Wireshark在云计算中的应用

    2023-12-19 10:28:03       46 阅读
  6. flutter学习-day14-事件处理和通知

    2023-12-19 10:28:03       47 阅读