日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt / QPainter、QPen、QBrush 如何理解

發布時間:2024/10/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt / QPainter、QPen、QBrush 如何理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前一直不是很理解上述三個類,直到看到了一篇博客,真的是茅塞頓開啊!下面是該博客的部分內容:


零、介紹

QPen 是畫筆,用來繪制圖形的輪廓線,以及定義輪廓線的顏色、樣式和屬性;
QBrush 是畫刷,用來填充封閉圖形,以及定義填充的顏色、樣式和屬性;
QPainter 是畫家,他手拿畫筆 QPen 和畫刷 QBrush,在畫布(QPaintDevice)上畫文字、圖形、圖片等。

可以充當畫布(QPaintDevice)的類(其子類)有:QWidget、QImage、QOpenGLPaintDevice、?QPagedPaintDevice、QPaintDeviceWindow、QPicture 和?QPixmap。
這么多類型的畫布中,QWidget 和 QPixmap 最常用。

一、QPen

畫筆定義了輪廓線的顏色、樣式和屬性,所謂樣式和屬性就是:
①?輪廓線的線型,如實線、點劃線、雙點劃線、虛線等,當然,虛線、點劃線的間距屬性等也都可以設置。
② 輪廓線端點的樣式,如圓形、方形等。
③ 輪廓線拐點的樣式,如尖角、圓角等。

以上3種樣式分別見以下三圖:

二、QBrush

畫刷定義了對封閉區域填充的顏色、樣式。

??

設置畫刷的類型,一般直接在構造函數形參設置。

上圖中點狀、網狀、斜線狀等基本填充方式,可通過形參 Qt::BrushStyle style 設置;

漸變填充可通過形參 const QGradient &gradient 設置;

紋理(圖片)填充可通過形參 const QPixmap &pixmap 或者 const QImage &image設置。

注意:漸變會同時作用于 R / G / B / A 四個通道,因此我們甚至可以做出由透明變得逐步不透明的效果,下文有例子。

三、示例代碼

void Widget::paintEvent(QPaintEvent *event) {QPainter p(this);//畫家把本this窗體作為畫布。p.setRenderHints(QPainter::HighQualityAntialiasing| QPainter::Antialiasing| QPainter::TextAntialiasing, true);//抗鋸齒以平滑int xLen = width();//畫布大小int yLen = height();//step 1:繪制綠色漸變背景//QRadialGradient(圓形漸變區域中心,漸變區域半徑,聚焦點坐標)QRadialGradient gradient(QPointF(100, 100), 100, QPointF(100,100));gradient.setColorAt(0.5, QColor(170, 255, 127, 255));//淺綠色不透明gradient.setColorAt(1.0, QColor(170, 255, 127, 0));//淺綠色全透明p.setPen(QColor(170, 255, 127, 150));//綠色半透明邊框p.setBrush(QBrush(gradient));//漸變畫刷p.drawRect(this->rect());//step 2:繪制橫豎兩條中心線p.setPen(QColor(255, 0, 0, 255));p.setBrush(QColor(255, 0, 0, 255));p.drawLine(QPoint(xLen / 2, 0), QPoint(xLen / 2, yLen));p.drawLine(QPoint(0, xLen/2), QPoint(yLen, xLen/2));//step 3:繪制3個圓p.save();//移動或旋轉坐標系之前,先備份當前坐標系的設置p.translate(xLen/2, yLen/2);//平移坐標系原點至p.setPen(QColor(255, 0, 0, 80));p.setBrush(QColor(255, 0, 0, 0));p.drawEllipse(QRect(-xLen/2, -yLen/2, xLen, yLen));//繪制p.drawEllipse(QRect(-xLen/4, -yLen/4, xLen/2, yLen/2));p.drawEllipse(QRect(-xLen/8, -yLen/8, xLen/4, yLen/4));//step 4:繪制文字p.setPen(QColor(255, 0, 0, 150));p.setBrush(QColor(255, 0, 0, 150));p.drawText(5, yLen/2, "2m");p.setPen(QColor(255, 0, 0, 150));p.setBrush(QColor(255, 0, 0, 150));p.drawText(xLen/4+ 5, yLen/2, "1m");QWidget::paintEvent(event); }

構造函數中加入如下代碼:

this->setAttribute(Qt::WA_DeleteOnClose);this->setFixedSize(200, 200);this->setWindowFlag(Qt::FramelessWindowHint);this->setAttribute(Qt::WA_TranslucentBackground, true);

?效果圖:

?

轉載于:QPainter、QPen、QBrush,繪圖、填充、漸變等使用方法_野生猿-群號1025127672-CSDN博客?

?

(SAW:Game Over!)?

?

總結

以上是生活随笔為你收集整理的Qt / QPainter、QPen、QBrush 如何理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。