Qt绘图事件: 坐标系统(平移 旋转 缩放 扭曲)讲解

本文介绍了一个使用Qt进行UI绘制的应用实例,通过四个滑动条分别控制平移、旋转、缩放和扭曲操作,实现了图形的动态变换效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ui界面

在这里插入图片描述
四个水平滑动块,拖动它们,分别实现平移 旋转 缩放 扭曲

效果

在这里插入图片描述

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QPen>
#include <QBrush>
namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;

protected:
    void paintEvent(QPaintEvent *);	//绘图事件
private slots:
    void on_SliderTranslate_sliderMoved(int position);
    void on_SliderRotate_sliderMoved(int position);
    void on_SliderScale_actionTriggered(int action);
    void on_sliderShear_actionTriggered(int action);
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

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

void Widget::paintEvent(QPaintEvent *){
    QPainter painter(this);
    QPen pen(QColor(Qt::black));
    QBrush brush(QColor(Qt::white));

    painter.setPen(pen);
    painter.setBrush(brush);
    painter.drawRect(QRect(0,0,width()*2/3,height()));
    brush.setColor(Qt::blue);
    painter.setBrush(brush);
    //平移 斜下方平移  参数:x轴平移  y轴平移
    painter.translate(ui->SliderTranslate->value(),ui->SliderTranslate->value());
    //旋转  坐标轴旋转
    painter.rotate(ui->SliderRotate->value());
    //缩放  0~3
    painter.scale(ui->SliderScale->value()/33.0, ui->SliderScale->value()/33.0);
    //扭曲 扭曲系数0~1
    painter.shear(ui->sliderShear->value()/99.0,ui->sliderShear->value()/99.0);

    painter.drawRect(0,0,100,100);  //画100 * 100 的矩形
}
//以下四个函数对应slider的槽函数 都是数值改变更新绘图事件
void Widget::on_SliderTranslate_sliderMoved(int position)
{
    update();
}

void Widget::on_SliderRotate_sliderMoved(int position)
{
    update();
}

void Widget::on_SliderScale_actionTriggered(int action)
{
    update();
}

void Widget::on_sliderShear_actionTriggered(int action)
{
    update();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值