【QT开发笔记-基础篇】| 第五章 绘图QPainter | 5.14 平移、旋转、缩放
本节对应的视频讲解: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 平移、旋转、缩放相关推荐
- 【QT开发笔记-基础篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget
本节对应的视频讲解:B_站_链_接 QTableWidget 是 Qt 中的表格控件,可以行列的形式来展示数据 1. 属性和方法 QTableWidget 有很多属性和方法,完整的可查看帮助文档. 在 ...
- 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.1 为什么要学习Qt
本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1334y1776z Qt 是一个跨平台的 C++ 图形用户界面应用程序框架 Qt 为应用程序开发 ...
- 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.4 项目构建流程
本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1cW4y1y7Lw 在上一节课中,我们新建了第一个 Qt 工程,其中包括 5 个文件: Hell ...
- 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.2 搭建Qt开发环境
本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1Pr4y1x7fh Qt 开发主要有两种开发环境 Qt Creator 它是 Qt 官方提供的开 ...
- 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.3 新建Qt工程
本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1UA4y1d7V2 学习任何的编程语言,创建的第一工程都是打印 hello world,学习 Q ...
- 【QT开发笔记-基础篇】| 第二章 常用控件 | 2.2 按钮 QPushButton
本节对应的视频讲解:B_站_视_频 https://www.bilibili.com/video/BV1zG411s7LG QPushButton 是 Qt 中的按钮,通常用于响应用户的点击,然后执行 ...
- 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.7 如何连接信号槽
本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1mN4y137H6 信号和槽要建立连接,本质上是通过 `connect` 函数来连接实现的. 但 ...
- 【QT开发笔记-基础篇】| 第一章 QT入门 | 1.6 自定义信号槽
本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1gA4y1d7gz 上节课,我们讲解了标准信号槽,标准信号槽中,信号和槽函数,都是 Qt 框架定 ...
- 【QT开发笔记-基础篇】| 第二章 常用控件 | 2.3 标签 QLabel
本节对应的视频讲解:B_站_链_接 https://www.bilibili.com/video/BV1wB4y1B7b7 QLabel 是 Qt 中的标签类,通常用于显示提示性的文本,也可以显示图像 ...
最新文章
- 如何使用python找出CPU数量
- Redis requires a monkey patched socket library to work with gevent
- tf.expand_dims 来增加维度
- 启动metabase_引入开源BI软件Metabase——数据分析平台建设(一)
- 非root用户ssh 执行 sudo远程机器免密钥
- Spring boot 配置文件,输入key值,自动补全--- 通过安装插件实现
- 天津现代职业学院计算机网络技术,天津现代职业技术学院计算机网络技术专业2016年在辽宁理科高考录取最低分数线...
- Leap手心发射线,碰撞点用小球表示,并用Line Renderer画出来
- CCS6.2.0 安装步骤详解
- EXCEL【数据处理之数据抽取——字段拆分】
- Python 并口(LPT)打印
- 在线全网音乐搭建源码_支持下载
- js实现手机横竖屏事件
- python前三周学习心得
- 《Machine Learning in Action》—— Taoye给你讲讲决策树到底是支什么“鬼”
- ios 音高测试软件,App Store 上的“固定音高训练”
- 使用excel进行数据挖掘(4)---- 突出显示异常值
- 学了很多理论,你为什么还是做不好一名数据分析师?
- Sublime Text 崇高文本 ----最性感的编辑器(程序员必备)
- 订餐系统jsp模板_基于JSP的网上订餐系统的设计与实现