QPainter描述
1、QPainter 類在小部件和其他繪制設(shè)備上執(zhí)行低級(jí)繪制。
2、QPainter 提供了高度優(yōu)化的功能來(lái)完成大多數(shù)圖形GUI程序所需的工作。它可以畫從簡(jiǎn)單的線條到復(fù)雜的形狀。它還可以繪制對(duì)齊的文本和像素圖。QPainter 可以對(duì)繼承 QPaintDevice 類的任何對(duì)象進(jìn)行操作。
3、QPainter 與 QPaintDevice 和 QPaintEngine 類一起構(gòu)成了Qt繪制系統(tǒng)的基礎(chǔ):
QPainter 是用于執(zhí)行繪圖操作的類。
QPaintDevice 表示可以使用 QPainter 在其上繪制的設(shè)備。
QPaintEngine 提供了一個(gè)接口,QPainter 可以使用這個(gè)接口來(lái)繪制不同類型的設(shè)備。
項(xiàng)目示例
在右邊可以選擇繪圖樣式,左邊顯示對(duì)應(yīng)的樣式效果


繪圖區(qū)
新建類PaintArea,基類QWidget,作為繪制圖形區(qū)域。其成員有:
private:
Shape m_shape;
QPen m_pen;
QBrush m_brush;
Qt::FillRule m_fillrule;
m_shape用于記錄繪圖樣式,例如繪制線或者繪制矩形;m_pen用于記錄畫筆樣式;m_brush用于記錄畫刷樣式,m_fillrule用于記錄填充規(guī)則。
當(dāng)左端控制區(qū)發(fā)生樣式改變時(shí),將對(duì)應(yīng)的樣式屬性傳遞給PaintArea類對(duì)應(yīng)的成員,然后調(diào)用update( )方法重繪窗體來(lái)實(shí)現(xiàn)繪圖區(qū)樣式的改變。這就需要我們重寫printEvent( )方法,來(lái)實(shí)現(xiàn)繪制自己需要的圖形。
PaintArea類構(gòu)造函數(shù)中,設(shè)置背景顏色為白色,以及固定大小
PaintArea::PaintArea(QWidget *parent) : QWidget(parent)
{
setPalette(QPalette(Qt::white));
setAutoFillBackground(true);
setFixedSize( 400,400);
}
控制區(qū)樣式改變時(shí),將對(duì)應(yīng)的樣式屬性傳遞給PaintArea類的對(duì)應(yīng)成員
void PaintArea::setShape(PaintArea::Shape shape) {
m_shape=shape;
update();
}
void PaintArea::setPen(QPen pen) {
m_pen=pen;
update();
}
void PaintArea::setBrush(QBrush brush) {
m_brush=brush;
update();
}
void PaintArea::setFillRule(Qt::FillRule rule) {
m_fillrule=rule;
update();
}
重寫paintEvent( )方法,在函數(shù)中根據(jù)m_shape圖片類型調(diào)用對(duì)應(yīng)的繪圖函數(shù)。

void PaintArea::paintEvent(QPaintEvent *event) {
//畫矩形和線的坐標(biāo)
QRect rect(50,100,300,200);
//畫點(diǎn)的坐標(biāo)
const QPoint points[4] = {
QPoint(150,100),
QPoint(300,150),
QPoint(350,250),
QPoint(100,300)
};
//畫弧的角度
int startAngle = 30*16;
int spanAngle = 120*16;
//畫路徑
QPainterPath path;
path.addRect(150,150,100,100);//左上角坐標(biāo),寬,高
path.moveTo(100,200);
//bic曲線
path.cubicTo(300,100,200,200,300,300);//三個(gè)坐標(biāo)
path.cubicTo(100,300,200,200,100,100);
path.setFillRule(m_fillrule);
? ? //畫家類
? ? QPainter painter(this);
painter.setPen(m_pen);//設(shè)置畫筆樣式
painter.setBrush(m_brush);//設(shè)置畫刷樣式
switch (m_shape) {
case Line://畫線
painter.drawLine(rect.topLeft(),rect.bottomRight());
break;
case Rectangle://畫矩形
painter.drawRect(rect);
break;
case RoundRect://圓角矩形
painter.drawRoundRect(rect);
break;
case Ellipse://橢圓
painter.drawEllipse(rect);
break;
case Polygon:
painter.drawPolygon(points,4);
break;
case Polyline:
painter.drawPolyline(points,4);
break;
case Points:
painter.drawPoints(points,4);
break;
case Arc:
painter.drawArc(rect,startAngle,spanAngle);
break;
case Path:
painter.drawPath(path);
break;
case Text://文本
painter.drawText(rect,Qt::AlignCenter,"北極熊貓");
break;
case Pixmap://圖片
painter.drawPixmap(50,100,QPixmap("fly.png"));
break;
default:
break;
}
}
控制區(qū)
控制區(qū)就是我們的主窗口類,類名為MainWidget,基類QWidget。將上面我們自定義的PaintArea類作為主窗口類的成員,成員名為m_paintArea。
畫筆顏色
當(dāng)點(diǎn)擊"更改"按鈕時(shí)彈出一個(gè)顏色對(duì)話框,將用戶選擇的顏色顯示在中間QFrame部件中,同時(shí)更改繪圖區(qū)邊框顏色

在初始化函數(shù)中初始化QFrame的顏色,以及按鈕的槽方法連接。tr可以使該顯示的文本能夠被翻譯。
void MainWidget::initWidgets(){
? ? //畫筆顏色
m_penColorLabel = new QLabel(tr("畫筆顏色"));
m_penColorFrame = new QFrame;
m_penColorFrame->setFrameStyle(QFrame::Panel|QFrame::Sunken);
m_penColorFrame->setAutoFillBackground(true);//設(shè)置填充背景
m_penColorFrame->setPalette(QPalette(Qt::black));//初始化顏色
m_penColorBtn = new QPushButton("更改");
connect(m_penColorBtn,SIGNAL(clicked()),this,SLOT(ShowPenColor()));
}
ShowPenColor( )槽方法
在該槽方法中,我們首先獲得QFrame部件的顏色,作為打開(kāi)顏色對(duì)話框時(shí)的初始顏色,接著從其他樣式選項(xiàng)框中獲取和畫筆樣式有關(guān)的值。調(diào)用PaintArea類的setPen( ) 方法設(shè)置畫筆樣式。
獲得部件顏色:QColor color = 部件名稱->palette( ).color(QPalette : :Window);參數(shù)QPalette::Window表示獲得該部件的窗體顏色
獲得組合框選中的值:首先調(diào)用組合框的currentIndex( )方法獲得組合框當(dāng)前選中值的索引,再調(diào)用組合框的itemData(int index).toInt( ),傳入索引,并且將返回值轉(zhuǎn)換成int類型,再?gòu)?qiáng)轉(zhuǎn)成對(duì)應(yīng)的樣式枚舉值。
void MainWidget::ShowPenColor(){
//筆顏色
QColor penCurrenColor = m_penColorFrame->palette().color(QPalette::Window);//獲取當(dāng)前顏色
QColor penColor = QColorDialog::getColor(penCurrenColor,this,"畫筆顏色");
m_penColorFrame->setPalette(QPalette(penColor));
//筆寬
int penWidth = m_penWidthSpinBox->value();
//畫筆樣式
int penStyleIndex = m_penStyleCombo->currentIndex();
Qt::PenStyle penStyle = Qt::PenStyle(m_penStyleCombo->itemData(penStyleIndex).toInt());
//筆帽樣式
int penCapIndex = m_penCapCombox->currentIndex();
Qt::PenCapStyle penCapStyle = Qt::PenCapStyle(m_penCapCombox->itemData(penCapIndex).toInt());
//連接點(diǎn)樣式
int penJoinIndex = m_penJoinCombox->currentIndex();
Qt::PenJoinStyle penJoinStyle = Qt::PenJoinStyle(m_penJoinCombox->itemData(penJoinIndex).toInt());
? ? //設(shè)置畫筆
m_paintArea->setPen(QPen(penColor,penWidth,penStyle,penCapStyle,penJoinStyle));
}
繪制形狀
形狀選取是一個(gè)組合框部件,在初始換函數(shù)中將可選取的值添加到組合框中.

在初始化函數(shù)中,向組合框添加形狀條目,這里我們又將能繪制的形狀單獨(dú)在PaintArea類中用枚舉類型聲明了一下
void MainWidget::initWidgets(){
m_paintArea = new PaintArea;
//形狀
m_shapeLabel = new QLabel(tr("形狀"));//tr表示可用于翻譯
m_shapeCombox = new QComboBox;
m_shapeCombox->addItem(tr("Line"),PaintArea::Line);
m_shapeCombox->addItem(tr("Rectangle"),PaintArea::Rectangle);
m_shapeCombox->addItem(tr("RoundedRect"),PaintArea::RoundRect);
m_shapeCombox->addItem(tr("Ellipse"),PaintArea::Ellipse);
m_shapeCombox->addItem(tr("Polygon"),PaintArea::Polygon);
m_shapeCombox->addItem(tr("Polyline"),PaintArea::Polyline);
m_shapeCombox->addItem(tr("Points"),PaintArea::Points);
m_shapeCombox->addItem(tr("Arc"),PaintArea::Arc);
m_shapeCombox->addItem(tr("Path"),PaintArea::Path);
m_shapeCombox->addItem(tr("Text"),PaintArea::Text);
m_shapeCombox->addItem(tr("Pixmap"),PaintArea::Pixmap);
connect(m_shapeCombox,SIGNAL(activated(int)),this,SLOT(ShowShape(int)));
}
ShowShape(int)槽方法
在該槽方法中,我們獲取形狀組合框選取的值,再調(diào)用PaintArea類的setShape( )方法設(shè)置形狀.
void MainWidget::ShowShape(int value){
//獲得索引在組合框中對(duì)應(yīng)的值,轉(zhuǎn)成int類型,再轉(zhuǎn)成枚舉值
PaintArea::Shape shape = PaintArea::Shape(m_shapeCombox->itemData(value).toInt());
m_paintArea->setShape(shape);
}
線寬
設(shè)置線寬我們采用一個(gè)QSpinBox部件來(lái)實(shí)現(xiàn),設(shè)置取值范圍為1到20。

初始化函數(shù)
void MainWidget::initWidgets(){
? ? m_penWidthLabel = new QLabel(tr("畫線寬度"));
m_penWidthSpinBox = new QSpinBox;
m_penWidthSpinBox->setRange(1,20);//設(shè)置取值范圍
connect(m_penWidthSpinBox,SIGNAL(valueChanged(int)),this,SLOT(ShowPenWidth(int)));//值改變信號(hào)
}
ShowPenWidth( int)槽方法
槽方法可以直接獲取到更改的筆寬值
void MainWidget::ShowPenWidth(int value){
//筆顏色
QColor penColor = m_penColorFrame->palette().color(QPalette::Window);//指定獲取這個(gè)部件的窗體顏色
//筆寬
int penWidth = value;
//畫筆樣式
int penStyleIndex = m_penStyleCombo->currentIndex();
Qt::PenStyle penStyle = Qt::PenStyle(m_penStyleCombo->itemData(penStyleIndex).toInt());
//筆帽樣式
int penCapIndex = m_penCapCombox->currentIndex();
Qt::PenCapStyle penCapStyle = Qt::PenCapStyle(m_penCapCombox->itemData(penCapIndex).toInt());
//連接點(diǎn)樣式
int penJoinIndex = m_penJoinCombox->currentIndex();
Qt::PenJoinStyle penJoinStyle = Qt::PenJoinStyle(m_penJoinCombox->itemData(penJoinIndex).toInt());
m_paintArea->setPen(QPen(penColor,penWidth,penStyle,penCapStyle,penJoinStyle));
}
畫筆風(fēng)格
畫筆風(fēng)格的選擇是一個(gè)組合框,我們可以選擇不同的風(fēng)格,例如實(shí)線(SolidLine)、點(diǎn)線(DotLine)或者其他樣式,也可以選擇自定義的DashLine。

不同的畫筆風(fēng)格對(duì)應(yīng)的效果大致如下

畫筆風(fēng)格的實(shí)現(xiàn)代碼與畫筆顏色大致相同:首先在初始化函數(shù)中向組合框添加可選項(xiàng),再將組合框的信號(hào)與槽方法連接。在槽方法中需要注意的是需要設(shè)置自定義的DashLine的樣式。
初始化函數(shù)
void MainWidget::initWidgets(){
//畫筆風(fēng)格
m_penStyleLabel = new QLabel(tr("畫筆風(fēng)格"));
m_penStyleCombo = new QComboBox;
m_penStyleCombo->addItem(tr("SolidLing"),static_cast<int>(Qt::SolidLine));//適用QT的枚舉值,轉(zhuǎn)int類型
m_penStyleCombo->addItem(tr("DorLine"),static_cast<int>(Qt::DotLine));
m_penStyleCombo->addItem(tr("DashDotLine"),static_cast<int>(Qt::DashDotLine));
m_penStyleCombo->addItem(tr("DashDotDotLine"),static_cast<int>(Qt::DashDotDotLine));
m_penStyleCombo->addItem(tr("CustomDashLine"),static_cast<int>(Qt::CustomDashLine));
connect(m_penStyleCombo,SIGNAL(activated(int)),this,SLOT(ShowPenStyle(int)));
}
ShowPenStyle(int)槽方法
在槽方法中需要設(shè)置自定義的DashLine樣式
void MainWidget::ShowPenStyle(int value){
//筆顏色
QColor penColor = m_penColorFrame->palette().color(QPalette::Window);//指定獲取這個(gè)部件的窗體顏色
//筆寬
int penWidth = m_penWidthSpinBox->value();
//畫筆樣式
Qt::PenStyle penStyle = Qt::PenStyle(m_penStyleCombo->itemData(value).toInt());
//筆帽樣式
int penCapIndex = m_penCapCombox->currentIndex();
Qt::PenCapStyle penCapStyle = Qt::PenCapStyle(m_penCapCombox->itemData(penCapIndex).toInt());
//連接點(diǎn)樣式
int penJoinIndex = m_penJoinCombox->currentIndex();
Qt::PenJoinStyle penJoinStyle = Qt::PenJoinStyle(m_penJoinCombox->itemData(penJoinIndex).toInt());
QPen paintPen(penColor,penWidth,penStyle,penCapStyle,penJoinStyle);
//設(shè)置自定義DashLine
if(penStyle == Qt::CustomDashLine){
QVector<qreal>dashes;
qreal space=4;//空格
dashes << 1 << space << 2 << space << 3 << space << 4 << space;
paintPen.setDashPattern(dashes);
}
m_paintArea->setPen(paintPen);
}
筆帽風(fēng)格

不同的筆帽風(fēng)格對(duì)應(yīng)的樣式如下

釋義:
Qt::SquareCap 方形線端,不覆蓋線的端點(diǎn)
Qt::FlatCap 方形線端,覆蓋線的端點(diǎn),并以線框一半向外延伸
Qt::RoundCap 圓線端
初始化函數(shù)
void MainWidget::initWidgets(){
//筆帽風(fēng)格
m_penCapLabel = new QLabel(tr("畫筆筆帽"));
m_penCapCombox =new QComboBox;
m_penCapCombox->addItem(tr("SquareCap"),Qt::SquareCap);
m_penCapCombox->addItem(tr("FlatCap"),Qt::FlatCap);
m_penCapCombox->addItem(tr("RoundCap"),Qt::RoundCap);
connect(m_penCapCombox,SIGNAL(activated(int)),this,SLOT(ShowPenCap(int)));
}
ShowPenStyle(int)槽方法
void MainWidget::ShowPenCap(int value){
//筆顏色
QColor penColor = m_penColorFrame->palette().color(QPalette::Window);//指定獲取這個(gè)部件的窗體顏色
//筆寬
int penWidth = m_penWidthSpinBox->value();
//畫筆樣式
int penStyleIndex = m_penStyleCombo->currentIndex();
Qt::PenStyle penStyle = Qt::PenStyle(m_penStyleCombo->itemData(penStyleIndex).toInt());
//筆帽樣式
Qt::PenCapStyle penCapStyle = Qt::PenCapStyle(m_penCapCombox->itemData(value).toInt());
//連接點(diǎn)樣式
int penJoinIndex = m_penJoinCombox->currentIndex();
Qt::PenJoinStyle penJoinStyle = Qt::PenJoinStyle(m_penJoinCombox->itemData(penJoinIndex).toInt());
m_paintArea->setPen(QPen(penColor,penWidth,penStyle,penCapStyle,penJoinStyle));
}
連接點(diǎn)樣式

不同的連接點(diǎn)樣式對(duì)應(yīng)的效果如下

釋義:
Qt::BevelJoin 兩條線相匯形成方形連接
Qt::MiterJoin 兩條線相匯形成尖角連接
Qt::RoundJoin兩條線相匯形成圓角連接
初始化函數(shù)
void MainWidget::initWidgets(){
//畫筆連接點(diǎn)
m_penJoinLabel = new QLabel("畫筆連接點(diǎn)");
m_penJoinCombox = new QComboBox;
m_penJoinCombox->addItem(tr("BevelJoin"),Qt::BevelJoin);
m_penJoinCombox->addItem(tr("MiterJoin"),Qt::MiterJoin);
m_penJoinCombox->addItem(tr("RoundJoin"),Qt::RoundJoin);
connect(m_penJoinCombox,SIGNAL(activated(int)),this,SLOT(ShowPenJoin(int)));
}
ShowPenJoin(int)槽方法
void MainWidget::ShowPenJoin(int value){
//筆顏色
QColor penColor = m_penColorFrame->palette().color(QPalette::Window);//指定獲取這個(gè)部件的窗體顏色
//筆寬
int penWidth = m_penWidthSpinBox->value();
//畫筆樣式
int penStyleIndex = m_penStyleCombo->currentIndex();
Qt::PenStyle penStyle = Qt::PenStyle(m_penStyleCombo->itemData(penStyleIndex).toInt());
//筆帽樣式
int penCapIndex = m_penCapCombox->currentIndex();
Qt::PenCapStyle penCapStyle = Qt::PenCapStyle(m_penCapCombox->itemData(penCapIndex).toInt());
//連接點(diǎn)樣式
Qt::PenJoinStyle penJoinStyle = Qt::PenJoinStyle(m_penJoinCombox->itemData(value).toInt());
m_paintArea->setPen(QPen(penColor,penWidth,penStyle,penCapStyle,penJoinStyle));
}
填充模式

不同的填充模式對(duì)應(yīng)的效果如下


Qt::OddEvenFill填充規(guī)則:從圖形中某一點(diǎn)畫一條水平線到圖形外,若這條線與圖形邊線的交點(diǎn)為奇數(shù)則說(shuō)明此點(diǎn)位于圖形的內(nèi)部;若交點(diǎn)為偶數(shù),則此點(diǎn)在圖形的外部。
Qt::WindingFill填充規(guī)則:從圖形總某一點(diǎn)畫一條水平線到圖形外,每個(gè)交點(diǎn)外邊線方向可能向上、向下、方向相反的相互抵消,若結(jié)果不為0表此點(diǎn)在圖形內(nèi),若為0則在圖形外。其中邊線的方向是由QPainterPath創(chuàng)建時(shí)根據(jù)描述的順序決定的,如果采用addRect()或addPolygon()等函數(shù)加入的圖形默認(rèn)為順時(shí)針?lè)较颉?/p>
初始化函數(shù)
void MainWidget::initWidgets(){
//填充模式
m_fillRuleLabel =new QLabel(tr("填充模式"));
m_fillRuleCombox = new QComboBox;
m_fillRuleCombox->addItem(tr("Odd Even"),Qt::OddEvenFill);
m_fillRuleCombox->addItem(tr("Winding"),Qt::WindingFill);
connect(m_fillRuleCombox,SIGNAL(activated(int)),this,SLOT(ShowFillRule(int)));
}
ShowFileRule(int)槽方法
void MainWidget::ShowFillRule(int value){
? ? int fillRuleIndex = m_fillRuleCombox.currentIndex();
Qt::FillRule fillrule = Qt::FillRule(m_fullRuleCombox->itemDate(fillRuleIndex).toInt());
m_paintArea->setFillRule(fillrule);
}
鋪展效果
不同的鋪展樣式效果如下

初始化函數(shù)
void MainWidget::initWidgets(){
m_spreadLabel = new QLabel(tr("鋪展效果"));
m_spreadCombox = new QComboBox;
m_spreadCombox->addItem(tr("PadSpread"),QGradient::PadSpread);
m_spreadCombox->addItem(tr("RepeadSpread"),QGradient::RepeatSpread);
m_spreadCombox->addItem(tr("ReflectSpread"),QGradient::ReflectSpread);
connect(m_spreadCombox,SIGNAL(activated(int)),this,SLOT(ShowSpread(int)));
}
ShowSpread(int)槽方法
m_brushSpread是一個(gè)QGradient : :Spread類型,用來(lái)記錄選擇的鋪展效果。之后調(diào)用ShowBrushStyle( int )槽方法來(lái)改變樣式效果
void MainWidget::ShowSpread(int value){
m_brushSpread = QGradient::Spread(m_spreadCombox->itemData(value).toInt());
ShowBrushStyle(m_brushStyleCombox->currentIndex());
}
畫刷風(fēng)格

不同的畫刷風(fēng)格效果如下

初始化函數(shù)
void MainWidget::initWidgets(){
//畫刷風(fēng)格
m_brushStyleLabel = new QLabel(tr("畫刷風(fēng)格"));
m_brushStyleCombox = new QComboBox;
m_brushStyleCombox->addItem(tr("SolidPattern"),static_cast<int>(Qt::SolidPattern));
m_brushStyleCombox->addItem(tr("Dense1Pattern"),static_cast<int>(Qt::Dense1Pattern));
m_brushStyleCombox->addItem(tr("Dense2Pattern"),static_cast<int>(Qt::Dense2Pattern));
m_brushStyleCombox->addItem(tr("Dense3Pattern"),static_cast<int>(Qt::Dense3Pattern));
m_brushStyleCombox->addItem(tr("Dense4Pattern"),static_cast<int>(Qt::Dense4Pattern));
m_brushStyleCombox->addItem(tr("Dense5Pattern"),static_cast<int>(Qt::Dense5Pattern));
m_brushStyleCombox->addItem(tr("Dense6Pattern"),static_cast<int>(Qt::Dense6Pattern));
m_brushStyleCombox->addItem(tr("Dense7Pattern"),static_cast<int>(Qt::Dense7Pattern));
m_brushStyleCombox->addItem(tr("HorPattern"),static_cast<int>(Qt::HorPattern));
m_brushStyleCombox->addItem(tr("VerPattern"),static_cast<int>(Qt::VerPattern));
m_brushStyleCombox->addItem(tr("CrossPattern"),static_cast<int>(Qt::CrossPattern));
m_brushStyleCombox->addItem(tr("BDiagPattern"),static_cast<int>(Qt::BDiagPattern));
m_brushStyleCombox->addItem(tr("FDiagPattern"),static_cast<int>(Qt::FDiagPattern));
m_brushStyleCombox->addItem(tr("DiagCrossPattern"),static_cast<int>(Qt::DiagCrossPattern));
m_brushStyleCombox->addItem(tr("LinearGradientPattern"),static_cast<int>(Qt::LinearGradientPattern));
m_brushStyleCombox->addItem(tr("ConicalGradientPattern"),static_cast<int>(Qt::ConicalGradientPattern));
m_brushStyleCombox->addItem(tr("RadialGradientPattern"),static_cast<int>(Qt::RadialGradientPattern));
m_brushStyleCombox->addItem(tr("TexturePattern"),static_cast<int>(Qt::TexturePattern));
connect(m_brushStyleCombox,SIGNAL(activated(int)),this,SLOT(ShowBrushStyle(int)));
}
ShowBrushStyle(int)槽方法
畫刷風(fēng)格中有幾種樣式需要特別設(shè)置參數(shù),例如QLineGradient就需要設(shè)置漸變區(qū)域和漸變色文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-783690.html
void MainWidget::ShowBrushStyle(int value){
? ? ?//獲取設(shè)置的畫刷顏色
QColor brushColor = m_brushColorFrame->palette().color(QPalette::Window);
? ? //畫刷風(fēng)格
Qt::BrushStyle brushStyle = Qt::BrushStyle(m_brushStyleCombox->itemData(value).toInt());
? ? //判斷畫刷風(fēng)格類型
//線性漸變
if(brushStyle==Qt::LinearGradientPattern){
//指定線性漸變的區(qū)域
QLinearGradient lineGradient(0,0,400,400);//起始點(diǎn)和終止點(diǎn)
//指定某個(gè)位置的漸變色,pos取值范圍0~1
lineGradient.setColorAt(0.0,Qt::white);//0表示起始位置
lineGradient.setColorAt(0.2,brushColor);
lineGradient.setColorAt(1.0,Qt::black); //1表示終止位置
lineGradient.setSpread(m_brushSpread);? ? //鋪展效果
m_paintArea->setBrush(lineGradient);
}
//環(huán)形渲染
else if(brushStyle == Qt::RadialGradientPattern){
//(中心坐標(biāo),半徑長(zhǎng)度,焦點(diǎn)坐標(biāo))
//如果需要對(duì)稱則中心坐標(biāo)和焦點(diǎn)坐標(biāo)保持一致
QRadialGradient radialGrdient(200,200,150,150,100);
//設(shè)置位置漸變色
radialGrdient.setColorAt(0.0,Qt::white);
radialGrdient.setColorAt(0.2,brushColor);
radialGrdient.setColorAt(1.0,Qt::black);
m_paintArea->setBrush(radialGrdient);
}
//弧形渲染(錐形渲染)
else if(brushStyle == Qt::ConicalGradientPattern){
QConicalGradient conicalGradient(200,200,30);//指定中心坐標(biāo)和角度
//設(shè)置位置漸變色
conicalGradient.setColorAt(0.0,Qt::white);
conicalGradient.setColorAt(0.2,brushColor);
conicalGradient.setColorAt(1.0,Qt::black);
m_paintArea->setBrush(conicalGradient);
}
else if(brushStyle == Qt::TexturePattern){
m_paintArea->setBrush(QBrush(QPixmap("fly.png")));
}
else{
m_paintArea->setBrush(QBrush(brushColor,brushStyle));
}
}
追風(fēng)趕月莫停留,平蕪盡處是春山!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-783690.html
到了這里,關(guān)于Qt—QPainter基本圖形繪制詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!