Qt5.9實(shí)現(xiàn)簡(jiǎn)單復(fù)合圖形
本文實(shí)例為大家分享了Qt5.9實(shí)現(xiàn)簡(jiǎn)單復(fù)合圖形的具體代碼,供大家參考,具體內(nèi)容如下
畫(huà)圖處理的簡(jiǎn)單復(fù)合圖形,話不多說(shuō),先上圖吧:

對(duì)應(yīng)的頭文件;
#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
對(duì)應(yīng)的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); //去長(zhǎng)和寬的小值
QRect rect((W -side)/2,(H-side)/2,side,side); //viewport矩形區(qū)
painter.drawRect(rect); //Viewport大小
// painter.setViewport((W-side)/2, (H-side)/2,side,side);//設(shè)置Viewport,物理坐標(biāo)范圍
painter.setViewport(rect); //設(shè)置Viewport
painter.setWindow(-100,-100,200,200); // 設(shè)置窗口大小,邏輯坐標(biāo)
painter.setRenderHint(QPainter::Antialiasing); //設(shè)置反走樣
//設(shè)置畫(huà)筆
QPen pen;
pen.setWidth(1); //線寬
pen.setColor(Qt::red); //畫(huà)線顏色
//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);//線端點(diǎn)樣式
//Qt::MiterJoin,Qt::BevelJoin,Qt::RoundJoin,Qt::SvgMiterJoin
pen.setJoinStyle(Qt::BevelJoin);//線的連接點(diǎn)樣式
painter.setPen(pen);
//線性漸變
QLinearGradient linearGrad(0,0,100,0);//從左到右,
linearGrad.setColorAt(0,Qt::yellow); //起點(diǎn)顏色
linearGrad.setColorAt(1,Qt::green); //終點(diǎn)顏色
linearGrad.setSpread(QGradient::PadSpread);//展布模式
painter.setBrush(linearGrad);
//設(shè)置復(fù)合
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;
}
在上面的程序中 ,對(duì)單個(gè)圓使用了線性漸變填充,單個(gè)圓從左到右 ,由黃色漸變?yōu)榫G色。
使用 QPainter: :setCompositionMode() 函數(shù)設(shè)置組合模式,即后面繪制的圖與前面繪制的圖的疊加模式 。
這樣就可以畫(huà)出比較炫酷的圖像了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
c語(yǔ)言中十進(jìn)制轉(zhuǎn)二進(jìn)制顯示小工具的實(shí)現(xiàn)代碼
本篇文章是對(duì)c語(yǔ)言中十進(jìn)制轉(zhuǎn)二進(jìn)制顯示小工具的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析的介紹,需要的朋友參考下2013-05-05
利用C語(yǔ)言結(jié)構(gòu)體實(shí)現(xiàn)通訊錄
這篇文章主要為大家詳細(xì)介紹了利用C語(yǔ)言結(jié)構(gòu)體實(shí)現(xiàn)通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
使用C語(yǔ)言編寫一個(gè)關(guān)機(jī)惡搞小程序
system函數(shù)的參數(shù)是"shutdown"時(shí),它將會(huì)執(zhí)行系統(tǒng)的關(guān)機(jī)命令,所以本文將利用這一特點(diǎn)制作一個(gè)關(guān)機(jī)惡搞小程序,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
C語(yǔ)言實(shí)現(xiàn)掃雷小游戲簡(jiǎn)單版
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷小游戲簡(jiǎn)單版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
C/C++?for?語(yǔ)句的要點(diǎn)與注意事項(xiàng)小結(jié)
C/C++ 中的?for?語(yǔ)句是一種常用的循環(huán)結(jié)構(gòu),用于重復(fù)執(zhí)行一段代碼,直到滿足某個(gè)條件為止,這篇文章主要介紹了C/C++?for?語(yǔ)句的要點(diǎn)與注意事項(xiàng),需要的朋友可以參考下2024-06-06

