本节对应的视频讲解:B_站_视_频

https://www.bilibili.com/video/BV1te4y1L7Mu

本节讲解平移、旋转、缩放这些变换操作

1. 关联信号槽

首先,在 widget.cpp 的构造中,为 “变换” 复选框,关联信号槽

// 平移、旋转、缩放
connect(ui->chkTransformation, SIGNAL(toggled(bool)), this, SLOT(transformChanged()));

2. 声明并实现槽函数

首先,在 widget.h 中声明 antialiasChanged() 槽函数:

class Widget : public QWidget
{private slots:void transformChanged();
};

然后,在 widget.cpp 中实现这个槽函数:

void Widget::transformChanged()
{ui->paintWidget->setTransform(ui->chkTransformation->isChecked());
}

3. 实现 setTransform

首先,在 PaintWidget.h 中声明 setTransform函数,并定义一个成员变量 mAntialias,如下:

class PaintWidget : public QWidget
{public slots:void setTransform(bool transformed);private:bool mTransform;
};

然后,在 PaintWidget.cpp 中,实现 setTransform 函数:

void PaintWidget::setTransform(bool transformed)
{this->mTransform = antialias;update();
}

最后,由于上边调用了 update 之后,系统会自动调用 paintEvent

因此,在 paintEvent 中变换操作,来完成绘制

void PaintWidget::paintEvent(QPaintEvent *event)
{for ( int x = 0; x < width(); x += 100 ) {for ( int y = 0; y < height(); y += 100 ) {// 先保存原来的状态// (0,0),(0,100),(0,200),(0,300)...(0,600)// (100,0),(100,100),(100,200),(100,300)...(100,600)// ...// (800,0),(800,100),(800,200),(800,300)...(800,600)painter.save();painter.translate(x, y);  // translate 修改的是坐标系if ( mTransform ) {// 按照如下写法,先缩放再平移,才能达到绕原图中心旋转缩放的效果painter.translate(50, 50);painter.rotate(90.0);painter.scale(0.7, 0.7);painter.translate(-50, -50);
#if 0// 按照如下写法,不能达到绕原图中心旋转缩放的效果painter.rotate(90.0);painter.translate(0, -100);painter.scale(0.6, 0.6);
#endif}}}
}

以上的变换步骤,可以参考以下示意图:

【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.14 平移、旋转、缩放相关推荐

  1. 【QT开发笔记-基础篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget

    本节对应的视频讲解:B_站_链_接 QTableWidget 是 Qt 中的表格控件,可以行列的形式来展示数据 1. 属性和方法 QTableWidget 有很多属性和方法,完整的可查看帮助文档. 在 ...

  2. 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.1 为什么要学习Qt

    本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1334y1776z Qt 是一个跨平台的 C++ 图形用户界面应用程序框架 Qt 为应用程序开发 ...

  3. 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.4 项目构建流程

    本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1cW4y1y7Lw 在上一节课中,我们新建了第一个 Qt 工程,其中包括 5 个文件: Hell ...

  4. 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.2 搭建Qt开发环境

    本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1Pr4y1x7fh Qt 开发主要有两种开发环境 Qt Creator 它是 Qt 官方提供的开 ...

  5. 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.3 新建Qt工程

    本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1UA4y1d7V2 学习任何的编程语言,创建的第一工程都是打印 hello world,学习 Q ...

  6. 【QT开发笔记-基础篇】| 第二章 常用控件 | 2.2 按钮 QPushButton

    本节对应的视频讲解:B_站_视_频 https://www.bilibili.com/video/BV1zG411s7LG QPushButton 是 Qt 中的按钮,通常用于响应用户的点击,然后执行 ...

  7. 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.7 如何连接信号槽

    本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1mN4y137H6 信号和槽要建立连接,本质上是通过 `connect` 函数来连接实现的. 但 ...

  8. 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.6 自定义信号槽

    本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1gA4y1d7gz 上节课,我们讲解了标准信号槽,标准信号槽中,信号和槽函数,都是 Qt 框架定 ...

  9. 【QT开发笔记-基础篇】| 第二章 常用控件 | 2.3 标签 QLabel

    本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1wB4y1B7b7 QLabel 是 Qt 中的标签类,通常用于显示提示性的文本,也可以显示图像 ...

最新文章

  1. 如何使用python找出CPU数量
  2. Redis requires a monkey patched socket library to work with gevent
  3. tf.expand_dims 来增加维度
  4. 启动metabase_引入开源BI软件Metabase——数据分析平台建设(一)
  5. 非root用户ssh 执行 sudo远程机器免密钥
  6. Spring boot 配置文件,输入key值,自动补全--- 通过安装插件实现
  7. 天津现代职业学院计算机网络技术,天津现代职业技术学院计算机网络技术专业2016年在辽宁理科高考录取最低分数线...
  8. Leap手心发射线,碰撞点用小球表示,并用Line Renderer画出来
  9. CCS6.2.0 安装步骤详解
  10. EXCEL【数据处理之数据抽取——字段拆分】
  11. Python 并口(LPT)打印
  12. 在线全网音乐搭建源码_支持下载
  13. js实现手机横竖屏事件
  14. python前三周学习心得
  15. 《Machine Learning in Action》—— Taoye给你讲讲决策树到底是支什么“鬼”
  16. ios 音高测试软件,‎App Store 上的“固定音高训练”
  17. 使用excel进行数据挖掘(4)---- 突出显示异常值
  18. 学了很多理论,你为什么还是做不好一名数据分析师?
  19. Sublime Text 崇高文本 ----最性感的编辑器(程序员必备)
  20. 订餐系统jsp模板_基于JSP的网上订餐系统的设计与实现

热门文章

  1. 仿支付宝蚂蚁森林效果
  2. 命令行 | 登录校园网 | curl
  3. 华中科技大学计算机考博真题,2017年华科考博真题汇总贴
  4. (Mimics、ANSYS)医学三维重建
  5. Linux下基于ffmpeg音视频解码
  6. 用Python的Pandas和Matplotlib绘制股票KDJ指标线
  7. 表白网站源码-html源码结婚倒计时
  8. java猜数字游戏课程设计报告_Java程序设计课程设计-猜数字游戏设计.doc
  9. 创客基地oDrive第二课 X2212电机配置
  10. 大数据专业适合考研吗?