关闭

对 qpainter::scale 的注解

1047人阅读 评论(0) 收藏 举报
分类:

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倍:


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:36979次
    • 积分:974
    • 等级:
    • 排名:千里之外
    • 原创:61篇
    • 转载:4篇
    • 译文:0篇
    • 评论:5条
    最新评论