Qt 2D绘图功能简单总结
生活随笔
收集整理的這篇文章主要介紹了
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绘图功能简单总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt 运用鼠标绘制多边形
- 下一篇: Elastic Nodes Exampl