对 qpainter::scale 的注解

原创 2016年09月03日 09:34:45

qpainter所在的widget有自己的坐标系:X轴向右,Y轴向下。qpainter自己也有坐标系,默认和widget是重合的。但是qpainter的坐标系可以做各种变换,如平移(translate),(scale)。

先说下scale。它的作用是改变qpainter的刻度长度。来看下面代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPaintEvent>
#include <QWheelEvent>
#include <QPainter>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),m_bRect(false)
{
    ui->setupUi(this);
}

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

void MainWindow::paintEvent(QPaintEvent *e)
{
    QPainter qp;
    qp.begin(this);
    
    qp.save();
    
    if(m_bRect)
    {

        qp.scale(2,2);
        
        qp.drawRect(0, 0, 100,100);
    }
    else
    {
        qp.setPen(QColor(255,0,0));

        qp.drawRect(0, 0, 100,100);
    }
    qp.restore();
    qp.end();
}

void MainWindow::wheelEvent(QWheelEvent *e)
{
    int iColor = e->angleDelta().y() + 130;
    qDebug()<<iColor<<"\n";

    m_background = QColor(iColor, iColor, iColor);
    update();
}

void MainWindow::mouseDoubleClickEvent(QMouseEvent *e)
{
    if(Qt::LeftButton == e->button())
    {
        m_bRect = true;
        m_pnt = e->pos();
    }

    update();
}

这部分代码的作用是,在程序刚启动时,在widget的左上角画一个红色正方形,边长100.启动后,假如用户用鼠标在widget上双击一次,程序又会在左上角画一个黑色正方形,边长也是100.但是注意,边长的单位都是以painter坐标系的刻度为单位的。且假如用户双击了widget,在绘制正方形之前,qt会进行如下变换:qp.scale(2,2)。这意味着尽管黑色正方形的边长也是100,但是由于qpainter的刻度已经变为原来2倍(默认qpainter的刻度和widget的刻度一样),所以黑色正方形的边长实际是红色正方形的2倍:


相关文章推荐

Qt浅谈之窗体缩放(仅增加测试代码)

一、简介         在csdn上看到了一篇窗体动态缩放的文章,觉得很有意思,在作者的代码上加上了测试程序,并把所有代码放在csdn上供下载。程序运行的效果: 二、详解 1、测试代码(完...

数字图像处理知识体系小结

http://blog.csdn.net/hitwengqi/article/details/8292675目录(?)[+]一数字图像基础二数字图像存储与显示三图像变换四形态学图像处理五图像边缘检测六...
  • Augusdi
  • Augusdi
  • 2013年03月15日 15:06
  • 2799

cvResize用法

#include "stdafx.h" #include #include #include int main(int argc, char* argv[]) { IplImage...

QT用Qpainter绘制实时曲线图

  • 2017年07月06日 09:41
  • 104KB
  • 下载

利用QPainter绘制各种图形

  • 2015年08月24日 16:56
  • 45KB
  • 下载

Qt QPainter中坐标系变换问题

一、坐标系简介。 Qt中每一个窗口都有一个坐标系,默认的,窗口左上角为坐标原点,然后水平向右依次增大,水平向左依次减小,垂直向下依次增大,垂直向上依次减小。原点即为(0,0)点,然后以像素为单位...

QOpenglWindow 和QPainter混合渲染

  • 2014年12月12日 20:14
  • 15KB
  • 下载

Qt之图形(QPainter的基本绘图)

Qt 中提供了强大的 2D 绘图系统,可以使用相同的 API 在屏幕和绘图设备上进行绘制,它主要基于QPainter、QPaintDevice 和 QPaintEngine 这三个类。 - QPai...

Qt下打印文档,请考虑QPainter(写给我这样的新手)

目前,把文本转换为HTML文档用QTextDocument打印是最方便的一个方法。 如果需要更多的设置,就需要我们自己进行页面布局和绘制。 这是《C++ GUI Programming w...
  • hind24
  • hind24
  • 2013年04月11日 17:26
  • 741
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对 qpainter::scale 的注解
举报原因:
原因补充:

(最多只允许输入30个字)