4.QPixmap,QTransform,绘图函数的使用

简介:  新建一个项目Painter MyWidget.h #ifndef MYWIDGET_H #define MYWIDGET_H   #include <QWidget>   class MyWidget : public QWidget {  

  1. 新建一个项目Painter

MyWidget.h

#ifndef MYWIDGET_H

#define MYWIDGET_H

 

#include <QWidget>

 

class MyWidget : public QWidget

{

    Q_OBJECT

public:

    explicit MyWidget(QWidget *parent = 0);

    void paintEvent(QPaintEvent *);

 

signals:

 

public slots:

 

};

 

#endif // MYWIDGET_H

MyWidget.cpp

#include "MyWidget.h"

#include <QPainter>

#include <QPixmap>

#include <QApplication>

 

MyWidget::MyWidget(QWidget *parent) :

    QWidget(parent)

{

}

 

void MyWidget::paintEvent(QPaintEvent *)

{

    QPixmap pixmap(size());

 

    QPainter p(&pixmap);

 

    //p.translate(100, 100);

    //p.scale();

    //消除锯齿

    p.setRenderHint(QPainter::Antialiasing);

    //转换

    QTransform transform;

    transform.translate(50,50);

    //旋转30

    transform.rotate(30);

   // transform.scale(.5, .5);

    p.setTransform(transform);

#if 1

    //下面的transform可以覆盖上面的一个transform的效果

    QTransform transform2;

    //对整个效果进行缩放

    transform2.scale(.5, .5);

    //最后一个参数实现和上面一个transform实现组合

    p.setTransform(transform2, true);

#endif

    //通过两个点实现画线

    p.drawLine(QPoint(0, 0), QPoint(100, 100));

 

    //p.translate(-100, -100);

    //钢笔

    p.setPen(QPen(Qt::red, 2, Qt::DashLine));

    //使用刷子

    p.setBrush(Qt::yellow);

    //设置刷子

    p.setFont(QFont("aaa", 40, 700, true));

 

    p.drawEllipse(QPoint(95, 333), 50, 50);

    //里面写上文字

    p.drawText(QPoint(300, 50), "Hello world");

    //p.drawPixmap(QPoint(40, 40), QPixmap("../aaa.png"));

    //p.drawRect(QRect(40, 60, 100, 50));

    //下面的方式实现画一个圆角矩形

    p.drawRoundRect(QRect(40, 60, 100, 50));

 

    p.end();

 

    p.begin(this);

    //通过下面的方式实现画图,之所以运行的结果是黑丝的图,是因为加的是pixmap

    p.drawPixmap(0, 0, pixmap);

}

 

int main(int argc, char** argv)

{

    QApplication app(argc, argv);

 

    MyWidget w;

    w.show();

 

    return app.exec();

}

运行结果:

 

 

 

 

 

目录
相关文章
|
算法 Unix 调度
【Qt 线程】深入探究QThread线程优先级:原理、应用与最佳实践
【Qt 线程】深入探究QThread线程优先级:原理、应用与最佳实践
1151 0
|
存储 算法 数据可视化
Qt开发技术:Qt绘图系统(二)QPainter详解
Qt开发技术:Qt绘图系统(二)QPainter详解
Qt开发技术:Qt绘图系统(二)QPainter详解
|
网络协议 Linux 网络安全
|
6月前
|
Python
如何在命令行中执行3ds Max脚本(MAXScript或Python)
执行3ds Max命令行魔法时,记得检查语法,不要让任何拼写错误破坏了咒语。一旦你习惯了这种方式,你会发现,它不仅能够极大地提高你的生产效率,而且还可以在不打开3D软件的情况下完成重复性的任务,让你的创作更加得心应手。
378 0
|
IDE Linux 测试技术
Linux项目自动化构建工具-make/Makefile
Linux项目自动化构建工具-make/Makefile
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
533 3
【Qt 学习笔记】Qt常用控件 | 显示类控件 | LCD Number的使用及说明
【Qt 学习笔记】Qt常用控件 | 显示类控件 | LCD Number的使用及说明
1250 0
|
编解码 Shell
在jetson中实现ffmpeg调用硬件编解码加速处理
在jetson中实现ffmpeg调用硬件编解码加速处理
3268 1
|
存储
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
1321 0
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
|
缓存 JavaScript 前端开发
Vue3——基础内容部分(小满版本)(四)
Vue3——基础内容部分(小满版本)
270 0