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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Qt 2D绘图功能简单总结

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt 2D绘图功能简单总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • Qt 2D繪圖功能簡單總結

Qt 2D繪圖功能簡單總結

Qt 的繪圖功能非常強大,它可以繪制一切想要的圖形,從最簡單的一條直線到其他任何復雜的圖形,還可以用來繪制文本和圖片。

Qt的繪圖系統中由QPainter來完成具體的繪制操作。該類提供了大量高度優化的函數來完成GUI編程所需要的大部分繪制工作。

2D 繪圖有兩個思路:

  • 1、不使用Qt的視圖框架。

    在一個部件重繪事件paintEvent()中繪制,首先創建QPainter對象,再進行圖形的繪制,最后程序結束自動銷毀QPaint對象。

例如:

void SimpleExampleWidget::paintEvent(QPaintEvent *){QPainter painter(this);painter.setPen(Qt::blue);painter.setFont(QFont("Arial", 30));painter.drawText(rect(), Qt::AlignCenter, "Qt");}

**

  • 2、運用Qt的視圖框架,在場景中添加圖形項。可以直接添加,或者間接添加

2.1 直接添加

例如:在場景中直接添加一個多邊形。

QPolygonF myPolygon;myPolygon <<QPointF(-8, 8)<<QPointF(8, 8)<<QPointF(0,-8);//這里的_scene 是QGraphicsScene *_scene的對象。QAbstractGraphicsShapeItem *tag_pt = _scene->addPolygon(myPolygon);

2.2 間接添加
圖形項可以通過鼠標繪制,可以預先繪制好,但是繪制部分還是需要QPainter來實現。

例如:創建一個一個圖形項,繼承QGraphicsItem

class AncItem: public QGraphicsItem { public:AncItem();QRectF boundingRect() const;void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget);void setColor(const QColor &color) { brushColor = color; }void setAncColor(bool active);protected:// void keyPressEvent(QKeyEvent *event);void mousePressEvent(QGraphicsSceneMouseEvent *event);// void hoverEnterEvent(QGraphicsSceneHoverEvent *event);// void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);private:QColor brushColor; };

然后在Paint()函數中繪制圖形

void AncItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget) {// 設置畫筆顏色、寬度painter->setPen(QPen(QColor(255,255,0),2));painter->setBrush(brushColor);/*-------繪制三角形---------*/static const QPointF points[3] = {QPointF(-8, -8), QPointF(8, -8), QPointF(0,12)};painter->drawPolygon(points, 3);/*---------------繪制三條弧線-------------*/// 反走樣painter->setRenderHint(QPainter::Antialiasing, true);// 設置畫筆顏色、寬度painter->setPen(QPen(QColor(255, 0, 230), 2));QRectF rect(-15, -15, 30, 30);// 起始角度int startAngle = -60 * 16;// 跨越度數int spanAngle = -65 * 16;// 繪制弧線painter->drawArc(rect, startAngle, spanAngle);rect.setRect(-20, -20, 40, 40);// 起始角度startAngle = -60 * 16;// 跨越度數spanAngle = -65 * 16;// 繪制弧線painter->drawArc(rect, startAngle, spanAngle);rect.setRect(-25, -25, 50, 50);// 起始角度startAngle = -60 * 16;// 跨越度數spanAngle = -65 * 16;// 繪制弧線painter->drawArc(rect, startAngle, spanAngle);}

2D繪圖會涉及到這樣幾個方面的內容:
1、基本圖形繪制和填充。

2、圖形的位置關系,坐標系統如何建立的?

3、文字和路徑可以繪制嗎?

4、圖像如Pixmap,Image 等是如何處理?

5、圖像的濾鏡等算法如何處理?

6、重繪事件如何處理,如何展現動畫?

這些內容都在QPainter類中可以可以實現,繪制的過程,一般也都是先設置(Settings),設置筆刷,設置畫筆等,然后操作(Drawing), Qt 官方提供了一個示例 Basic Drawing example。可以很好地借鑒。

總結

以上是生活随笔為你收集整理的Qt 2D绘图功能简单总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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