1. 程式人生 > 程式設計 >Qt5.9實現簡單複合圖形

Qt5.9實現簡單複合圖形

本文例項為大家分享了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,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,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() 函式設定組合模式,即後面繪製的圖與前面繪製的圖的疊加模式 。

這樣就可以畫出比較炫酷的影象了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。