Qt5.9实现简单复合图形

 更新时间:2020年07月20日 17:18:06   作者:比卡丘不皮  
这篇文章主要为大家详细介绍了Qt5.9实现简单复合图形,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Qt5.9实现简单复合图形的具体代码,供大家参考,具体内容如下

画图处理的简单复合图形,话不多说,先上图吧:

对应的头文件;

#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
 
namespace Ui {
class Widget;
}
 
class Widget : public QWidget
{
 Q_OBJECT
protected:
 void paintEvent(QPaintEvent *event);
public:
 explicit Widget(QWidget *parent = nullptr);
 ~Widget();
 
private:
 Ui::Widget *ui;
};
 
#endif // WIDGET_H

对应的cpp 文件为:

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
void Widget::paintEvent(QPaintEvent *event)
{
 Q_UNUSED(event)
 QPainter painter(this);
 
 int W = width();
 int H = height();
 
 int side = qMin(W,H); //去长和宽的小值
 QRect rect((W -side)/2,(H-side)/2,side,side); //viewport矩形区
 painter.drawRect(rect); //Viewport大小
 // painter.setViewport((W-side)/2, (H-side)/2,side,side);//设置Viewport,物理坐标范围
 painter.setViewport(rect); //设置Viewport
 painter.setWindow(-100,-100,200,200); // 设置窗口大小,逻辑坐标
 
 painter.setRenderHint(QPainter::Antialiasing); //设置反走样
 
 //设置画笔
 QPen pen;
 pen.setWidth(1); //线宽
 pen.setColor(Qt::red); //画线颜色
  //Qt::NoPen,Qt::SolidLine, Qt::DashLine, Qt::DotLine,Qt::DashDotLine,Qt::DashDotDotLine,Qt::CustomDashLine
 pen.setStyle(Qt::SolidLine); //线的类型
 //Qt::FlatCap, Qt::SquareCap,Qt::RoundCap
 pen.setCapStyle(Qt::FlatCap);//线端点样式
 //Qt::MiterJoin,Qt::BevelJoin,Qt::RoundJoin,Qt::SvgMiterJoin
 pen.setJoinStyle(Qt::BevelJoin);//线的连接点样式
 painter.setPen(pen);
 //线性渐变
 
 QLinearGradient linearGrad(0,0,100,0);//从左到右,
 linearGrad.setColorAt(0,Qt::yellow); //起点颜色
 linearGrad.setColorAt(1,Qt::green); //终点颜色
 linearGrad.setSpread(QGradient::PadSpread);//展布模式
 painter.setBrush(linearGrad);
 //设置复合
 painter.setCompositionMode(QPainter::CompositionMode_Difference);
 
 for (int i = 0;i < 36;i++) {
  painter.drawEllipse(QPoint(50,0),50,50);
  painter.rotate(10);
 }
 
}
 
Widget::Widget(QWidget *parent) :
 QWidget(parent),
 ui(new Ui::Widget)
{
 ui->setupUi(this);
 setPalette(QPalette(Qt::white));
 setAutoFillBackground(true);
 this->resize(300,300);
}
 
Widget::~Widget()
{
 delete ui;
}

在上面的程序中 ,对单个圆使用了线性渐变填充,单个圆从左到右 ,由黄色渐变为绿色。

使用 QPainter: :setCompositionMode() 函数设置组合模式,即后面绘制的图与前面绘制的图的叠加模式 。

这样就可以画出比较炫酷的图像了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 配置CLion管理Qt项目国际化支持的方法

    配置CLion管理Qt项目国际化支持的方法

    这篇文章主要介绍了配置CLion管理Qt项目国际化支持的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • C语言进阶教程之循环语句缺陷详析

    C语言进阶教程之循环语句缺陷详析

    循环语句是用于重复执行某条语句(循环体)的语句,它包含一个控制表达式,每循环执行一次都要对控制表达式进行判断,如果表达式为真,则继续执行循环,这篇文章主要给大家介绍了关于C语言进阶教程之循环语句缺陷的相关资料,需要的朋友可以参考下
    2021-08-08
  • 由static_cast和dynamic_cast到C++对象占用内存的全面分析

    由static_cast和dynamic_cast到C++对象占用内存的全面分析

    下面小编就为大家带来一篇由static_cast和dynamic_cast到C++对象占用内存的全面分析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • C语言排序方法(冒泡,选择,插入,归并,快速)

    C语言排序方法(冒泡,选择,插入,归并,快速)

    这篇文章给大家分享C语言所有经典排序方法,文章给大家提供完整的实例代码帮助大家快速学习掌握C语言排序方法,感兴趣的朋友一起看看吧
    2021-08-08
  • C语言实现单链表实现方法

    C语言实现单链表实现方法

    这篇文章主要介绍了C语言实现单链表实现方法的相关资料,链表分为单向链表、双向链表、循环链表,需要的朋友可以参考下
    2017-08-08
  • 基于MFC实现类的序列化详解

    基于MFC实现类的序列化详解

    序列化是将程序中的对象以一种二进制格式存储到存储设备中(例如文本/数据库等),以实现“永生”或随意“流动”。本文将为大家详细讲讲如何基于MFC实现类的序列化,需要的可以参考一下
    2022-07-07
  • C语言 文件的打开与关闭详解及示例代码

    C语言 文件的打开与关闭详解及示例代码

    本文主要介绍C语言 文件的基础知识,这里整理了相关资料及示例代码,有兴趣的小伙伴可以参考下
    2016-08-08
  • C语言结构数组实现贪吃蛇小游戏

    C语言结构数组实现贪吃蛇小游戏

    这篇文章主要为大家详细介绍了C语言结构数组实现贪吃蛇小游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • C语言实现贪吃蛇游戏代码

    C语言实现贪吃蛇游戏代码

    大家好,本篇文章主要讲的是C语言实现贪吃蛇游戏代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Linux下用C语言实现推箱子游戏

    Linux下用C语言实现推箱子游戏

    这篇文章主要为大家详细介绍了Linux下用C语言实现小老鼠推箱子的游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07

最新评论