Qt5.9實現簡單複合圖形
阿新 • • 發佈:2020-07-21
本文例項為大家分享了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() 函式設定組合模式,即後面繪製的圖與前面繪製的圖的疊加模式 。
這樣就可以畫出比較炫酷的影象了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。