博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt——绘图
阅读量:5160 次
发布时间:2019-06-13

本文共 2711 字,大约阅读时间需要 9 分钟。

1.涉及类

QPainter  QPaintEngine QPaintDevice

作为绘图的使用者,只需要关注 QPainter 和 QPaintDevice

 

2.QPainter

使用 QPainter 进行绘图

常用API

setPen, setBrush, setDevice

Pen, Brush : 又有 setColor 、setStyle

 

3. QDevice

通过与 QDevice 的继承关系知道能在哪里绘图。

常见 绘图设备

QPixmap : 对屏幕显示进行优化,与平台相关

QBitmap : 继承与QPixmap,只有黑白两色,省资源。

QImage :与平台无关,能进行图片修改,能线程绘图

QPicture:二进制文件保存绘图状态。

//绘图设备, 400*300    QPixmap pixmap(400, 300);    QPainter p(&pixmap);    //填充白色背景色    //p.fillRect(0, 0, 400, 300, QBrush(Qt::white));    pixmap.fill(Qt::white);    p.drawPixmap(0, 0, 80, 80, QPixmap("../Image/face.png"));    //保存图片    pixmap.save("../pixmap.jpg");
//创建一个绘图设备,QImage::Format_ARGB32背景是透明    QImage image(400, 300, QImage::Format_ARGB32);    QPainter p;    p.begin(&image);    //绘图    p.drawImage(0, 0, QImage("../Image/face.png"));    //对绘图设备前50个像素点进行操作    for(int i = 0; i < 50; i++)    {        for(int j = 0; j < 50; j++)        {            image.setPixel(QPoint(i, j), qRgb(0, 255, 0));            //image.pixel(QPoint(i, j));        }    }    p.end();    image.save("../image.png");
QPicture picture;    QPainter p;    p.begin(&picture);    p.drawPixmap(0, 0, 80, 80, QPixmap("../Image/face.png"));    p.drawLine(50, 50, 150, 50);    p.end();    //保存的是二进制文件    picture.save("../picture.png");    QPicture pic;    pic.load("../picture.png"); //加载文件    QPainter p(this);    p.drawPicture(0, 0, pic);

QPixmap与QImage的互相转换

QPainter p(this);    QPixmap pixmap;    pixmap.load("../Image/face.png");    //QPixmap -> QImage    QImage tempImage = pixmap.toImage();    p.drawImage(0, 0, tempImage);    QImage image;    image.load("../Image/face.png");    //QImage -> QPixmap    QPixmap tempPixmap = QPixmap::fromImage(image);    p.drawPixmap(100, 0, tempPixmap);

4.绘制无边框图片

重要API:

设置无边框

setWindowFlags 

setAttribute

globalPos

frameGeometry

#include "widget.h"#include "ui_widget.h"#include 
#include
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); //去窗口表框 setWindowFlags(Qt::FramelessWindowHint | windowFlags()); //把窗口背景设置为透明 setAttribute(Qt::WA_TranslucentBackground);}Widget::~Widget(){ delete ui;}void Widget::paintEvent(QPaintEvent *){ QPainter p(this); p.drawPixmap(0, 0, QPixmap("../Image/sunny.png"));}void Widget::mousePressEvent(QMouseEvent *e){ if(e->button() == Qt::RightButton) { //如果是右键 close(); } else if(e->button() == Qt::LeftButton) { //求坐标差值 //当前点击坐标-窗口左上角坐标 p = e->globalPos() - this->frameGeometry().topLeft(); }}void Widget::mouseMoveEvent(QMouseEvent *e){ if(e->buttons() & Qt::LeftButton) { move(e->globalPos() - p); }}

 

转载于:https://www.cnblogs.com/yangxinrui/p/10515151.html

你可能感兴趣的文章
网络攻防 第七周学习总结
查看>>
关于_weblogic.xml的sessionID配置
查看>>
给一次重新选择的机会_您还会选择程序员吗?
查看>>
Storm Trident示例CombinerAggregator
查看>>
MFC中lib和dll的区别
查看>>
$data[$i++]+=2;不等于$data[$i++]=$data[$i++]+2;
查看>>
面向对象——案例练习(2)求圆的周长和面积的多文件实现
查看>>
WebAPI项目 IHttpActionResult不识别解决办法
查看>>
JS按照指定的周期来调用函数方法
查看>>
java Redis读取数据方法
查看>>
安装maven
查看>>
小白学数据分析----->与MySQL有关的小知识_I
查看>>
几个ssh和sftp的命令
查看>>
CSS:position属性
查看>>
ASP.NET Web API标准的“管道式”设计
查看>>
【Spark机器学习速成宝典】模型篇03线性回归【LR】(Python版)
查看>>
<C++> 类(2):对象的种类 类之间的关系 重载操作符operator
查看>>
软工网络15个人作业5——软件工程总结
查看>>
c#字符串加载wpf控件模板代码 - 简书
查看>>
WPF 自定义滚动条(ScrollView、ScrollBar)样式
查看>>