05-project

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

// 定义Widget类,继承自QWidget,带有对应的UI界面布局
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget) // 初始化私有成员ui,指向从.ui文件生成的UI对象
{
    // 设置UI界面布局到当前Widget
    ui->setupUi(this);

    // 设置第一个滑动条的最大值为Widget宽度减去100
    ui->horizontalSlider->setMaximum(width() - 100);

    // 设置第二个滑动条的最大值为360,代表旋转角度范围
    ui->horizontalSlider_2->setMaximum(360);

    // 设置第三个滑动条的最大值为3,用于缩放比例调整
    ui->horizontalSlider_3->setMaximum(3);

    // 设置第四个滑动条的最大值为100,并设置单步值为1,用于精细控制剪切/shear值
    ui->horizontalSlider_4->setMaximum(100);
    ui->horizontalSlider_4->setSingleStep(1);
}

// 析构函数,释放UI资源
Widget::~Widget()
{
    delete ui;
}

// 重写QWidget的paintEvent函数,用于响应窗口重绘事件
void Widget::paintEvent(QPaintEvent *event)
{
    // 创建一个QPainter对象,用于在当前Widget上进行绘图
    QPainter painter(this);

    // 设置画笔颜色为红色
    QPen pen(QColor(Qt::red));
    painter.setPen(pen);

    // 设置填充刷颜色为白色
    QBrush brush(QColor(Qt::white));
    painter.setBrush(brush);

    // 绘制一个占据Widget三分之二宽度和全部高度的矩形框
    painter.drawRect(0, 0, width() * 2 / 3, height());

    // 根据第一个滑动条的值进行平移
    painter.translate(ui->horizontalSlider->value(), ui->horizontalSlider->value());

    // 根据第二个滑动条的值进行旋转
    painter.rotate(ui->horizontalSlider_2->value());

    // 根据第三个滑动条的值进行缩放
    painter.scale(static_cast<double>(ui->horizontalSlider_3->value()), static_cast<double>(ui->horizontalSlider_3->value()));

    // 根据第四个滑动条的值进行剪切/shear变换
    painter.shear(ui->horizontalSlider_4->value()/100.0,ui->horizontalSlider_4->value()/100.0);

    // 在变换后坐标系下绘制一个固定大小(100x100)的矩形框
    painter.drawRect(0, 0, 100, 100);
}

// 槽函数,当第一个滑动条移动时,调用update()使Widget重绘
void Widget::on_horizontalSlider_sliderMoved(int position)
{
    update();
}

// 槽函数,当第二个滑动条移动时,调用update()使Widget重绘
void Widget::on_horizontalSlider_2_sliderMoved(int position)
{
    update();
}

// 槽函数,当第三个滑动条移动时,调用update()使Widget重绘
void Widget::on_horizontalSlider_3_sliderMoved(int position)
{
    update();
}

// 槽函数,当第四个滑动条移动时,调用update()使Widget重绘
void Widget::on_horizontalSlider_4_sliderMoved(int position)
{
    update();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值