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() 函数设置组合模式,即后面绘制的图与前面绘制的图的叠加模式 。

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

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

(0)

相关推荐

  • Qt5.9画五角星的方法

    本文实例为大家分享了Qt5.9画五角星的具体代码,供大家参考,具体内容如下 今天记录一下画图部分的程序,比较简单,容易操作,为接下来打好基础: 先说界面吧: 里面的图位置跟图像学有点关系,多多理解一下: 对应的头文件: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT protected: voi

  • 利用QT写一个极简单的图形化Python闹钟程序

    今天我们讲一下用Python写的GUI小程序.一个小闹钟(只是屏幕提示,没有声音哦) 让我们先介绍这个闹钟如何奇葩. 需要通过命令行启动. 没有标题栏. 没菜单. 甚至没有关闭按钮. 没有运行界面. 看到这里想必大家要问了,何必去做一个这样弱爆了的程序呢.显然,教育意义大于其实际用处. 像其他的模块一样,QT界面包是需要加载的. 我们用到了命令行输入,所以,sys模块也是必须的. 用到了时间,但是我们不需要使用time模块,我们用QT提供的QTime模块. 让我们先写import 语句部分. i

  • 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); pub

  • Qt5.9实现简单的多线程实例(类QThread)

    Qt开启多线程,主要用到类QThread.有两种方法,第一种用一个类继承QThread,然后重新改写虚函数run().当要开启新线程时,只需要实例该类,然后调用函数start(),就可以开启一条多线程.第二种方法是继承一个QObject类,然后利用moveToThread()函数开启一个线程槽函数,将要花费大量时间计算的代码放入该线程槽函数中.第二种方法可以参考我写的另一篇博客:https://www.jb51.net/article/223796.htm 下面我总结的主要是第一种方法.(注意:

  • 分享java打印简单图形的实现代码

    我们平时都是使用的画图工具进行简单图形的绘制,今天我们使用java打印一些简单的图形 实现代码如下 package test; /** * * @author hanzel * @打印图形 * */ public class Array { public static void main(String[] args) { //打印长方形 int[] a = new int[10]; for(int i=0 ;i<a.length;i++){ for(int j=0;j<a.length;j++

  • Python四款GUI图形界面库介绍

    目录 一.Python官方标准库:Tkinter (必须了解) 用法: 二.三方库:PyQt5(推荐,但是还是累) 1.安装: 2.QtDesigner 3.配置PyCharm 4.使用PyQt 三.三方库:wxPython 四.三方库:PyGTK 一.Python官方标准库:Tkinter (必须了解) Python内置图形界面库——Tkinter. Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平

  • PHP实现的简单三角形、矩形周长面积计算器分享

    运用PHP面向对象的知识设计一个图形计算器,同时也运用到了抽象类知识,这个计算器可以计算三角形的周长和面积以及矩形的周长和面积.本图形计算器有4个页面:1.PHP图形计算器主页index.php;    2.形状的抽象类shape.class.php;    3三角形计算类triangle.class.php;    4.矩形计算类rect.class.php. PHP图形计算器代码点击下载:   php图形计算器.zip 代码分别如下: PHP图形计算器主页: <html>     <

  • 深入c# GDI+简单绘图的具体操作步骤(二)

    在上一篇里已经向大家介绍了如何使用GDI+绘制简单的图像,这一片继续向大家介绍其它一些绘图知识.1.首先我们来看下上一片中我们使用过的Pen.Pen的属性主要有: Color(颜色),DashCap(短划线终点形状),DashStyle(虚线样式),EndCap(线尾形状), StartCap(线头形状),Width(粗细)等.我们可以用Pen 来画虚线,带箭头的直线等 复制代码 代码如下: Pen  p = new  Pen(Color.Blue, 5);//设置笔的粗细为,颜色为蓝色Grap

  • Android自定义View实现shape图形绘制

    概述 之前曾写过一篇文章介绍了Android中drawable使用Shape资源,通过定义drawable中的shape资源能够绘制简单的图形效果,如矩形,椭圆形,线形和圆环等.后来我在项目中正好遇到这样一个需求,要在特定的位置上显示一条垂直的虚线.正当我胸有成竹的把上面的资源文件放入进去的时候,我才发现它并不能符合我的要求.使用shape画出的垂直虚线,其实就是将一条水平的线,旋转90度.但这样做的弊端就是,该View有效区域为旋转90度后与原来位置相重合的区域,还不能随意的改动,这样的效果根

  • Android中调用系统的文件浏览器及自制简单的文件浏览器

    调用系统自带的文件浏览器 这很简单: /** 调用文件选择软件来选择文件 **/ private void showFileChooser() { intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); try { startActivityForResult(Intent.createChooser(inte

  • PHP 5.0创建图形的实用方法完整篇第1/3页

    本文将展示如何使用 PHP 构建面向对象的图形层.使用面向对象的系统可以用来构建复杂的图形,这比使用标准 PHP 库中所提供的基本功能来构建图形简单很多. 我将图形编辑程序分为两类:一类是绘图程序,利用这种程序可以一个像素一个像素地绘制图像:另外一类是制图程序,这种程序提供了一组对象,例如线.椭圆和矩形,您可以使用这些对象来组合成一幅大图像,例如 JPEG.绘图程序非常适合进行像素级的控制.但是对于业务图形来说,制图程序是比较好的方式,因为大部分图形都是由矩形.线和椭圆组成的. PHP 内置的制

  • PHP图形操作之Jpgraph学习笔记

    本文实例讲述了PHP图形操作之Jpgraph学习笔记.分享给大家供大家参考,具体如下: 一.Jpgraph安装配置 下载Jpgraph安装包 解压后放置磁盘中,(最好是放在和网页一起) 修改php.ini文件: 1.内存  memory_limit=X,至少为32M 2.执行时间  max_execution_time=X,对于复杂的图片加载时需要较多的时间,根据图片的复杂度做相应的修改 3.缓存  output_buffering  注释掉缓存,便于调试 二.使用Jpgraph创建图形的基本步

随机推荐