QT每日一练day26:绘制图片
一.第一阶段
发现上述图片没有显示全!!!!!
二.第二阶段
设置宽高比,平滑转换
运行结果(GIF动图):
发现上述图片在数次缩放后会产生失真!!!!!
三.第三阶段
为了避免图像缩放过程中产生失真,修改代码(去掉赋值)
运行结果(GIF动图):
四.第四阶段
使用绘制图片的另一个类<QImage>
运行结果(GIF动图):
五.第五阶段(使用的是QPixmap)
运行结果(GIF动图):
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void paintEvent(QPaintEvent *);
public slots:void drawPixmapSlot();
private:QPixmap* _image->save("E:/image.png");//保存绘制出来的图像到E盘;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include<QPainter>
#include<QPushButton>
#include<QThread>
#include<QDebug>
Widget::Widget(QWidget *parent): QWidget(parent)
{this->resize(640,480);_pixmap=new QPixmap(this->size());//会根据硬件设备进行优化_pixmap->fill(QColor("#00000000"));QPushButton* pb=new QPushButton("pb",this);connect(pb,SIGNAL(clicked()),this,SLOT(drawPixmapSlot()));
}void Widget::drawPixmapSlot()
{QPainter painter;painter.begin(_pixmap);painter.setPen(QPen(Qt::red));painter.setBrush(QBrush(Qt::blue));painter.drawLine(0,0,100,100);//QThread::sleep(5);painter.drawRect(100,100,100,100);painter.drawPixmap(200,200,QPixmap("C:/Users/xiaowen/Desktop/小鸟游六花.png").scaled(300,300,Qt::IgnoreAspectRatio,Qt::SmoothTransformation));painter.save();painter.restore();painter.end();this->update();_pixmap->save("E:/image.png");//保存绘制出来的图像到E盘}void Widget::paintEvent(QPaintEvent *)
{qDebug()<<__FUNCTION__<<endl;QPainter painter;painter.begin(this);painter.drawPixmap(0,0,*_pixmap);painter.end();
}Widget::~Widget()
{delete _pixmap;
}
六.第六阶段(使用QImage来实现五)
运行结果(GIF动图):
E盘:
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void paintEvent(QPaintEvent *);
public slots:void drawImageSlot();
private:QImage* _image;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include<QPainter>
#include<QPushButton>
#include<QThread>
#include<QDebug>
Widget::Widget(QWidget *parent): QWidget(parent)
{this->resize(640,480);_image=new QImage(this->size(),QImage::Format_ARGB32_Premultiplied);QPushButton* pb=new QPushButton("pb",this);connect(pb,SIGNAL(clicked()),this,SLOT(drawImageSlot()));
}void Widget::drawImageSlot()
{QPainter painter;painter.begin(_image);painter.setPen(QPen(Qt::red));painter.setBrush(QBrush(Qt::blue));painter.drawLine(0,0,100,100);//QThread::sleep(5);painter.drawRect(100,100,100,100);painter.drawImage(200,200,QImage("C:/Users/xiaowen/Desktop/小鸟游六花.png").scaled(300,300,Qt::IgnoreAspectRatio,Qt::SmoothTransformation));painter.save();painter.restore();painter.end();_image->save("E:/image.png");//保存绘制出来的图像到E盘this->update();}void Widget::paintEvent(QPaintEvent *)
{qDebug()<<__FUNCTION__<<endl;QPainter painter;painter.begin(this);painter.drawImage(0,0,*_image);painter.end();
}Widget::~Widget()
{delete _image;
}
七.附:代码
xiaowen_QT_day26
QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \widget.cppHEADERS += \widget.h# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void paintEvent(QPaintEvent *);
private:QPixmap* _pixmap;QImage* _image;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include<QPainter>
#include<QPixmap>
#include<QImage>
Widget::Widget(QWidget *parent): QWidget(parent)
{_pixmap=new QPixmap("C:/Users/xiaowen/Desktop/小鸟游六花.png");//会根据硬件设备进行优化_image=new QImage("C:/Users/xiaowen/Desktop/小鸟游六花2.png");//提供像素级别的图像处理
}void Widget::paintEvent(QPaintEvent *)
{QPainter painter;painter.begin(this);//painter.drawPixmap(0,0,_pixmap->scaled(this->width(),this->height(),// Qt::KeepAspectRatioByExpanding,Qt::SmoothTransformation));painter.drawImage(0,0,_image->scaled(this->width(),this->height(),Qt::KeepAspectRatioByExpanding,Qt::SmoothTransformation));painter.end();
}Widget::~Widget()
{delete _pixmap;
}
main.cpp
#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
QT每日一练day26:绘制图片相关推荐
- 【Qt】2D绘图之绘制图片
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 简单绘制图片 04. 平移图片 05. 缩放图片 06. 旋转图片 07. 扭曲图片 08. 附录 01. 概述 Qt提供 ...
- QT每日一练day4:ubuntu中使用QT
(本文主要是为了说明QT的跨平台特性) 一.安装QT sudo apt-get install qt5-default qtcreator cmake 二.打开QT 可以点击图标或命令行方式: 三 ...
- QT每日一练day1:第一个程序
参考博文:Qt常见类.窗口类继承关系树图 QT每日一练(1):第一个程序 最终效果(GIF动图): step1: step2: step3: step4: step5: step6: step7: s ...
- QT每日一练day27:绘制不规则窗体
注:本文本来应该是以一个不规则的图片作为历程的,,忘记了!!!! 一.第一阶段:隐藏窗体框架 运行结果(GIF动图): widget.cpp 二.第二阶段:将窗口设置为透明 运行结果(GIF动 ...
- QT每日一练day24:绘画事件
一.第一阶段 设置线条粗细 二.第二阶段:设置笔的样式 如:虚线 三.第三阶段:绘制矩形 四.第四阶段:设置颜色 轮廓颜色 笔刷颜色 笔刷样式 五.第五阶段:绘制其他形状图像和文字 六.第六阶段:图像 ...
- QT每日一练day29:QT中的多线程探究
一.未使用多线程,则w0先运行完后,w1才开始运行 运行结果(GIF动图): main.cpp xiaowen_QT_day29.pro QT+=widgets SOURCES += \main.cp ...
- QT每日一练day25:触发绘画事件
运行结果(GIF动图): widget.cpp 附代码: xiaowen_QT_day25.pro QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT ...
- QT每日一练day23:鼠标进入与离开事件
运行结果(GIF动图): xiaowen_QT_day23.pro QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFI ...
- QT每日一练day22:键盘事件
一.第一阶段--键盘按键按下事件 运行结果(GIF动图): xiaowen_QT_day22.pro QT += core guigreaterThan(QT_MAJOR_VERSION, 4): Q ...
最新文章
- objective-c如何在linux下进入Modern模式
- Codechef REBXOR HYSBZ - 4260(01字典树+区间异或最大)
- [html] 你知道微信端的浏览器内核是什么吗?
- 升级步骤linux_开发人员福音,在win10系统上安装linux子系统
- 命名空间中不存在名称_原木定制中不开裂的木材真的存在吗?
- Java_基础—用LinkedList模拟栈数据结构的集合并测试
- 学习 jQuery -2 document 对象的 ready 事件
- 前端开发者必备google插件
- 绿洲因涉嫌抄袭下架;Facebook 泄露 4.19 亿条用户数据;Go 1.13 发布 | 极客头条...
- Mybatis传递多个参数
- python中面向对象的ui_Python面向对象和图形用户界面(一)---- 面向对象
- 奇怪的ISA服务停止故障
- 国内四大炒股软件APP 全面技术解析
- 单龙芯3A3000-7A1000PMON研究学习-(1)硬件原理图
- 图像特征提取:Sobel边缘检测
- Flutter实战之网络请求框架Dio入门使用
- Instant Neural Graphics Primitives with a Multiresolution Hash Encoding 翻译
- 磁盘阵列是什么,主要做什么用?
- Linux内核中的IPSEC实现(3) ---转载
- 史上最详细LRW数据集、LRW-1000数据集、LRS2数据集、LRS3-TED数据集、OuluVS2数据集介绍
热门文章
- Cron 触发器及相关内容 (第二部分)
- java abstractlist_Java集合类源码解析:AbstractList
- anconda设置镜像源_管理2000+Docker镜像,Kolla是如何做到的
- delphi中griddata控件写入float数值_年中巨献!明道云发布多项重磅功能
- 基于Python+Django的企业人事管理系统
- 基于JAVA+SpringBoot+Mybatis+MYSQL的在线论坛管理系统
- 虚拟机 ubuntu10.04 安装 Mercury MW150U 无线网卡(AR9271芯片组)
- C# 给自己写的软件,加注册码功能。
- GridView控件日期格式化
- c++删除数组中重复元素_leetcode 数组中重复的数字