天天看點

Qt QGraphicsItem的使用如何在設計界面中添加QGraphicsView控件?QGraphicsView組成單元QGraphicsView類方法QGraphicsScene類方法QGraphicsItem類方法簡單demoQPainterPath類方法QPen類方法如何給圖元綁定事件?

如何在設計界面中添加QGraphicsView控件?

1 打開設計界面,點開Display     Widgets,将Graphics Widget 控件拖動到界面上即可。
           

QGraphicsView組成單元

1 -QGraphicsView(視圖)
 2 ---QGraphicsScene(場景)
 3 -----QGraphicsItem(圖元)  
 4 
 5     
 6 QGraphicsView提供一個可視的視窗,用于顯示場景中的圖元,一個場景中可以有多個視圖。    
 7 QGraphicsScene本身不可見,是一個存儲圖元的容器,必須通過與之相連的QGraphicsView視圖來顯示及與外界進行互動,主要提供圖元的操作接口、傳遞事件和管理各個圖元狀态。
 8 QGraphicsItem是場景中各個圖元的基礎類。    
 9 QGraphicsItem圖元主要特性如下: 
10 A、支援滑鼠按下、移動、釋放、輕按兩下、懸停、滾動和右鍵菜單事件。 
11 B、支援鍵盤輸入焦點和按鍵事件 
12 C、支援拖拽事件
13 D、支援分組,使用父子關系和QGraphicsItemGroup
14 E、支援碰撞檢測     
15     
16 GraphicsView是一個基于圖元的Model/View架構的架構,每一個元件都是一個獨立的元素。
GraphicsView繪圖時首先建立一個場景,然後建立圖元對象(如一個直線對象、一個多邊形對象),再使用場景的add()函數,将圖元對象添加到場景中,最後通過視圖進行顯示。
對于複雜的圖像來說,如果圖像包含大量的直線、曲線、多邊形等圖元對象,管理圖元對象比管理QPainter的繪制過程語句要容易,并且圖元對象更符合面向對象的思想,圖形的可複用性更好。 
           

QGraphicsView類方法

本文福利,莬費領取Qt開發學習資料包、技術視訊,内容包括(C++語言基礎,Qt程式設計入門,QT信号與槽機制,QT界面開發-圖像繪制,QT網絡,QT資料庫程式設計,QT項目實戰,QSS,OpenCV,Quick子產品,面試題等等)↓↓↓↓↓↓見下面↓↓文章底部點選莬費領取↓↓
1 // 1 傳回位置為 QPoint 的項,如果有多項,則傳回最上面那個項
 2 QGraphicsItem *itemAt(const QPoint &pos) const
 3 // 2 傳回關聯場景中的所有項
 4 QList<QGraphicsItem *> items() const
 5 // 3 傳回有Rect包含或與Rect相交的所有項的清單、這些項按堆疊順序排列(第一項是最上面的項)    
 6 QList<QGraphicsItem *> items(const QRect &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
 7 QList<QGraphicsItem *> items(int x, int y, int w, int h, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
 8 // 4 傳回目前視圖中的場景,如過沒有,傳回nullptr
 9 QGraphicsScene *scene() const
10 // 5 設定場景的可視化區域 (超出的部分,會出現滾動條)
11 void setSceneRect(const QRectF &rect)
12 void setSceneRect(qreal x, qreal y, qreal w, qreal h)
13 // 6 設定場景在視圖中的對齊方式,預設為居中對齊
14 void setAlignment(Qt::Alignment alignment)
15 // 7 設定視圖中的場景背景筆刷    
16 QBrush backgroundBrush() const
17 void setBackgroundBrush(const QBrush &brush)
18 // 8 設定場景可否被滑鼠左鍵拖動,預設無法被拖動
19 QGraphicsView::DragMode dragMode() const
20 void setDragMode(QGraphicsView::DragMode mode)
21 // 9 設定前景筆刷
22 QBrush foregroundBrush() const
23 void setForegroundBrush(const QBrush &brush)
24 // 10 是否運作場景互動(響應滑鼠事件)    
25 bool isInteractive() const
26 void setInteractive(bool allowed)
27 // 11 設定場景
28 void setScene(QGraphicsScene *scene)
           

QGraphicsScene類方法

1 // 1 添加子項目
 2 void QGraphicsScene::addItem(QGraphicsItem *item)      
 3 // 2 移除子項目
 4 void QGraphicsScene::removeItem(QGraphicsItem *item)
 5 // 3 添加直線項   
 6 QGraphicsLineItem *QGraphicsScene::addLine(const QLineF &line, const QPen &pen = QPen())
 7 QGraphicsLineItem *QGraphicsScene::addLine(qreal x1, qreal y1, qreal x2, qreal y2, const QPen &pen = QPen())
 8 // 4 添加橢圓項
 9 QGraphicsEllipseItem *addEllipse(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush())
10 QGraphicsEllipseItem *addEllipse(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())
11 // 5 添加路徑項
12 QGraphicsPathItem *QGraphicsScene::addPath(const QPainterPath &path, const QPen &pen = QPen(), const QBrush &brush = QBrush())
13 // 6 添加圖檔項
14 QGraphicsPixmapItem *QGraphicsScene::addPixmap(const QPixmap &pixmap)    
15 // 7 添加矩形項
16 QGraphicsRectItem *addRect(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush())
17 QGraphicsRectItem *addRect(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())
18 // 8 添加文本項
19 QGraphicsTextItem *QGraphicsScene::addText(const QString &text, const QFont &font = QFont())
20 // 9 添加多邊形項
21 QGraphicsPolygonItem *addPolygon(const QPolygonF &polygon, const QPen &pen = QPen(), const QBrush &brush = QBrush())
22 // 9 添加裝置項  
23 QGraphicsProxyWidget *QGraphicsScene::addWidget(QWidget *widget, Qt::WindowFlags wFlags = Qt::WindowFlags())
24 // 10 設定場景的背景畫刷
25 QBrush backgroundBrush() const
26 // 11 清除焦點
27 void clearFocus()   
28 // 12 擷取與標明項目包含或相交的項
29 QList<QGraphicsItem *> collidingItems(const QGraphicsItem *item, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const  
30 // 13 将一些項添加到一個分組中,并傳回該分組的指針
31 QGraphicsItemGroup *QGraphicsScene::createItemGroup(const QList<QGraphicsItem *> &items)
32 // 14 拆除分組
33 void QGraphicsScene::destroyItemGroup(QGraphicsItemGroup *group)
34 // 15 設定字型   會觸發 FontChange 信号
35 QFont font() const
36 void setFont(const QFont &font)
37 // 16 設定前景筆刷
38 QBrush foregroundBrush() const
39 void setForegroundBrush(const QBrush &brush)
40 // 17 擷取場景的高度
41 qreal height() const
42 // 18 擷取場景的寬度
43 qreal width() const
44 // 19 檢視場景是否是活動的
45 bool isActive() const   
46 // 20 傳回位置為 QPoint 的項,如果有多項,則傳回最上面那個項
47 QGraphicsItem *itemAt(const QPointF &position, const QTransform &deviceTransform) const  
48 QGraphicsItem *itemAt(qreal x, qreal y, const QTransform &deviceTransform) const
49 // 21 傳回場景中的所有項
50 QList<QGraphicsItem *> items(Qt::SortOrder order = Qt::DescendingOrder) const 
51 // 22 傳回場景中的所有與該點相交的項
52 QList<QGraphicsItem *> items(const QPointF &pos, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
53 // 23 傳回有Rect包含或與Rect相交的所有項的清單、這些項按堆疊順序排列(第一項是最上面的項)    
54 QList<QGraphicsItem *> items(const QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
55 // 24 傳回場景中的所有與該路徑相交的項 
56 QList<QGraphicsItem *> items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
57 // 25 傳回場景中正在被滑鼠抓取的項目(正在拖動的項目?)
58 QGraphicsItem *mouseGrabberItem() const
59 // 26 移除所有項目
60 void removeItem(QGraphicsItem *item)
61 // 27 設定場景範圍
62 QRectF sceneRect() const
63 void setSceneRect(const QRectF &rect)
64 void setSceneRect(qreal x, qreal y, qreal w, qreal h)
65 // 28 事件過濾器
66 bool QGraphicsScene::sendEvent(QGraphicsItem *item, QEvent *event)    
67 // 29 激活項目\部件
68 void setActivePanel(QGraphicsItem *item)
69 void setActiveWindow(QGraphicsWidget *widget)
70 // 30 設定場景的背景畫刷
71 QBrush backgroundBrush() const
72 void setBackgroundBrush(const QBrush &brush)
73 // 31 設定調色闆
74 QPalette palette() const
75 void setPalette(const QPalette &palette)
76 // 32 設定樣式
77 void setStyle(QStyle *style)
78 QStyle *style() const
79 // 33 傳回所有包含此場景的視圖
80 QList<QGraphicsView *> views() const    
81 // 34 尚不清楚
82 void update(qreal x, qreal y, qreal w, qreal h)  
           

QGraphicsItem類方法

1 void QGraphicsItem::setVisible(bool visible)    
  2 // 19 設定模式  是否阻塞父、父父。。。 等面闆的輸入
  3 void QGraphicsItem::setPanelModality(QGraphicsItem::PanelModality panelModality)  
  4 QGraphicsItem::PanelModality QGraphicsItem::panelModality() const
  5 // 20 設定父項(将從舊父項child中移除) 檢視父|子項
  6 void QGraphicsItem::setParentItem(QGraphicsItem *newParent)  
  7 QGraphicsItem *QGraphicsItem::parentItem() const
  8 QGraphicsObject *QGraphicsItem::parentObject() const    
  9 QGraphicsWidget *QGraphicsItem::parentWidget() const
 10 QList<QGraphicsItem *> QGraphicsItem::childItems() const    
 11 // 21 設定坐标
 12 void QGraphicsItem::setPos(const QPointF &pos)
 13 void QGraphicsItem::setPos(qreal x, qreal y)    
 14 QPointF QGraphicsItem::pos() const    
 15 // 22 設定旋轉角度  -360~360
 16 void QGraphicsItem::setRotation(qreal angle)    
 17 qreal QGraphicsItem::rotation() const    
 18 // 23 設定項的比例因子  成倍的放大或縮小
 19 void QGraphicsItem::setScale(qreal factor)    
 20 qreal QGraphicsItem::scale() const    
 21 // 24 設定是否被選中(前提為可選)
 22 void QGraphicsItem::setSelected(bool selected)
 23 // 25 設定工具提示
 24 void QGraphicsItem::setToolTip(const QString &toolTip) 
 25 QString QGraphicsItem::toolTip() const    
 26 // 26 設定轉換矩陣
 27 void QGraphicsItem::setTransform(const QTransform &matrix, bool combine = false)  
 28 QTransform QGraphicsItem::transform() const      
 29 QTransform QGraphicsItem::deviceTransform(const QTransform &viewportTransform) const    
 30 // 27 在項坐标中設定轉換的原點。 
 31 void QGraphicsItem::setTransformOriginPoint(const QPointF &origin) 
 32 void QGraphicsItem::setTransformOriginPoint(qreal x, qreal y)    
 33 QPointF QGraphicsItem::transformOriginPoint() const    
 34 // 28 設定動畫清單
 35 void QGraphicsItem::setTransformations(const QList<QGraphicsTransform *> &transformations)    
 36 // 29 設定堆疊順序,高的項總在低的項上面
 37 void QGraphicsItem::setZValue(qreal z)   
 38 // 30 以路徑的形式傳回項的形狀
 39 QPainterPath QGraphicsItem::shape() const
 40 // 31 傳回圖形項    
 41 QGraphicsObject *QGraphicsItem::toGraphicsObject()    
 42 // 32 傳回最頂層的父項(祖先項),如果沒有父項,則傳回自己
 43 QGraphicsItem *QGraphicsItem::topLevelItem() const    
 44 // 33 傳回最頂層的父項Widget
 45 QGraphicsWidget *QGraphicsItem::topLevelWidget() const      
 46 // 34 設定在其它項之上  (z值相同時,才能生效)  
 47 void QGraphicsItem::stackBefore(const QGraphicsItem *sibling)
 48 // 35 釋放鍵盤抓取
 49 void QGraphicsItem::ungrabKeyboard()
 50 // 36 釋放滑鼠抓取
 51 void QGraphicsItem::ungrabMouse()
 52 // 37 清除該項中的遊标。   
 53 void QGraphicsItem::unsetCursor()    
 54 // 38 計劃重繪這個項目中由rect覆寫的區域。
 55 void QGraphicsItem::update(const QRectF &rect = QRectF()) 
 56 void QGraphicsItem::update(qreal x, qreal y, qreal width, qreal height)    
 57 // 39 傳回項目的視窗,如果該項目沒有視窗,則傳回nullptr。
 58 QGraphicsWidget *QGraphicsItem::window() const    
 59 // 40 傳回重繪的矩形(虛函數,需自己實作)
 60 QRectF QGraphicsItem::boundingRect() const    
 61 // 41 傳回該項的邊界區域    
 62 QRegion QGraphicsItem::boundingRegion(const QTransform &itemToDeviceTransform) const   
 63 // 42 将項目的緩存模式設定為模式。預設無緩存
 64 void QGraphicsItem::setCacheMode(QGraphicsItem::CacheMode mode, const QSize &logicalCacheSize = QSize())    
 65 QGraphicsItem::CacheMode QGraphicsItem::cacheMode() const     
 66 // 43 傳回該項子項的邊界矩形。
 67 QRectF QGraphicsItem::childrenBoundingRect() const 
 68 // 44 傳回該項目的剪輯路徑, 
 69 QPainterPath QGraphicsItem::clipPath() const
 70 // 45 判斷該項在某種重疊方式下是否與其他項重疊
 71 bool QGraphicsItem::collidesWithItem(const QGraphicsItem *other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
 72 // 46 判斷該項在某種重疊方式下是否與路徑重疊
 73 bool QGraphicsItem::collidesWithPath(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
 74 // 47 傳回所有與該項重疊的項
 75 QList<QGraphicsItem *> QGraphicsItem::collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const    
 76 // 48 傳回此項和其他項的最接近的公共祖先項
 77 QGraphicsItem *QGraphicsItem::commonAncestorItem(const QGraphicsItem *other) const    
 78 // 49 如果該項包含點則傳回true。
 79 virtual bool contains(const QPointF &point) const
 80 // 50 設定标志
 81 void QGraphicsItem::setFlags(QGraphicsItem::GraphicsItemFlags flags)    
 82 void QGraphicsItem::setFlag(QGraphicsItem::GraphicsItemFlag flag, bool enabled = true)    
 83 QGraphicsItem::GraphicsItemFlags QGraphicsItem::flags() const    
 84 // 51 水準移動
 85 void QGraphicsItem::moveBy(qreal dx, qreal dy) 
 86 // 52 這個虛函數傳回一個表示該項不透明區域的形狀。
 87 QPainterPath QGraphicsItem::opaqueArea() const    
 88 // 53 傳回項的面闆,如果該項沒有面闆,則傳回nullptr。我的項目是一個面闆,它将傳回本身。否則,它将傳回最近的前面闆。   
 89 QGraphicsItem *QGraphicsItem::panel() const    
 90 // 54 傳回該項的目前場景,如果該項沒有存儲在場景中,則傳回nullptr    
 91 QGraphicsScene *QGraphicsItem::scene() const    
 92 // 55 傳回該項目在場景坐标中的邊界矩形,
 93 QRectF QGraphicsItem::sceneBoundingRect() const    
 94 // 56 傳回項目在場景坐标中的位置。    
 95 QPointF QGraphicsItem::scenePos() const    
 96 // 57 通過dx, dy滾動rect的内容。如果rect是一個空矩形(預設),項目的邊界矩形會滾動。    
 97 void QGraphicsItem::scroll(qreal dx, qreal dy, const QRectF &rect = QRectF())    
 98 // 58 設定此項目的筆。
 99 void QAbstractGraphicsShapeItem::setPen(const QPen &pen)    
100 // 59 設定項目的筆刷為筆刷。
101 void QAbstractGraphicsShapeItem::setBrush(const QBrush &brush)    
           

簡單demo

1 // .h
 2 #include <QGraphicsView>
 3 #include <QGraphicsItem>
 4 
 5 QGraphicsView * graphicsView;                // 定義視圖
 6 QGraphicsScene graphicsScene;                // 定義場景
 7 QGraphicsPathItem graphicsPathItem;            // 定義路徑類圖元
 8 QPainterPath path;                            // 定義路徑
 9 QPen pen;                                    // 定義畫筆
10 // .cpp
11 graphicsView = ui->graphicsView;            // 擷取UI上的視圖
12 graphicsView->setScene(&graphicsScene);        // 将場景添加到視圖中
13 
14 pen.setColor(QColor(0,0,128,150));            // 設定畫筆顔色
15 pen.setWidth(6);                            // 設定畫筆寬度    
16 graphicsPathItem->setPen(pen);                // 圖元綁定畫筆 
17 
18 path.addRect(0,0,60,60);                    // 在路徑中添加矩形
19 path.addText(QPoint(0,30),QFont("微軟雅黑", 15, QFont::Thin),"電台一");    // 在路徑中添加文字
20 
21 graphicsPathItem.setPath(path);                // 将路徑添加到圖元中
22 graphicsScene.addItem(&graphicsPathItem);    // 将圖元添加到場景中
23 
24 
25 /*-----------------------------------  更新視圖的方式  -------------------------------------*/
26 // 隻需更新圖元即可
27 path.addRect(20,20,60,60);                // 更新路徑
28 graphicsPathItem.setPath(path);            // 更新圖元
           

QPainterPath類方法

1 // 1 在指定的邊界矩形内建立一個橢圓,并将其作為封閉的子路徑添加到畫家路徑中。
 2 void QPainterPath::addEllipse(const QRectF &boundingRectangle)
 3 void QPainterPath::addEllipse(qreal x, qreal y, qreal width, qreal height)    
 4 // 2 将給定的路徑作為封閉的子路徑添加到此路徑。
 5 void QPainterPath::addPath(const QPainterPath &path)
 6 // 3 将給定的多邊形作為(未閉合的)子路徑添加到路徑中。    
 7 void QPainterPath::addPolygon(const QPolygonF &polygon)    
 8 // 4 将給定的矩形作為封閉的子路徑添加到此路徑。    
 9 void QPainterPath::addRect(const QRectF &rectangle)    
10 void QPainterPath::addRect(qreal x, qreal y, qreal width, qreal height)    
11 // 5 将給定的文本作為一組從提供的字型建立的封閉子路徑添加到此路徑。
12 void QPainterPath::addText(const QPointF &point, const QFont &font, const QString &text)    
13 void QPainterPath::addText(qreal x, qreal y, const QFont &font, const QString &text)    
14 // 6 以浮點精度的矩形傳回此畫家路徑的邊界矩形。
15 QRectF QPainterPath::boundingRect() const    
16 // 7 清除存儲的路徑元素。    
17 void QPainterPath::clear()    
18 // 8 通過在子路徑的開始處畫一條線來關閉目前的子路徑,   
19 void QPainterPath::closeSubpath()  
20 // 9 通過從路徑的最後一個元素添加一行到給定路徑的第一個元素,将給定路徑連接配接到此路徑。    
21 void QPainterPath::connectPath(const QPainterPath &path)    
22 // 10 如果給定點在路徑内傳回true,否則傳回false。
23 bool QPainterPath::contains(const QPointF &point) const   
24 bool QPainterPath::contains(const QRectF &rectangle) const    
25 bool QPainterPath::contains(const QPainterPath &p) const   
26 // 11 傳回路徑的目前位置。
27 QPointF QPainterPath::currentPosition() const    
28 // 12 将畫家路徑的填充規則設定為給定的填充規則。Qt提供了兩種填充路徑的方法:Qt::OddEvenFill (default)  Qt::WindingFill
29 void QPainterPath::setFillRule(Qt::FillRule fillRule)
30 Qt::FillRule QPainterPath::fillRule() const    
31 // 13 從目前位置添加一條直線到給定端點
32 void QPainterPath::lineTo(const QPointF &endPoint)    
33 void QPainterPath::lineTo(qreal x, qreal y)
34 // 14 将目前點移動到給定的點,隐式地啟動一個新的子路徑并關閉前一個。  
35 void QPainterPath::moveTo(const QPointF &point)    
36 void QPainterPath::moveTo(qreal x, qreal y)   
37 // 15 傳回指定長度len處的整個路徑的百分比。    
38 qreal QPainterPath::percentAtLength(qreal len) const    
39 // 16 傳回目前路徑百分比t處的點。參數t必須在O和1之間。    
40 QPointF QPainterPath::pointAtPercent(qreal t) const    
41 // 17 在目前位置和給定端點之間添加一條二次貝塞爾曲線,控制點由c指定。
42 void QPainterPath::quadTo(const QPointF &c, const QPointF &endPoint)
43 void QPainterPath::quadTo(qreal cx, qreal cy, qreal endPointX, qreal endPointY)
44 // 18 傳回此路徑的簡化版本 (合并版本)
45 QPainterPath QPainterPath::simplified() const    
46 // 19 用這個繪制器路徑交換其他繪制器路徑。這個操作非常快,而且從不失敗。
47 void QPainterPath::swap(QPainterPath &other)    
48 // 20 建立并傳回路徑的反向副本。  
49 QPainterPath QPainterPath::toReversed() const    
           

QPen類方法

1 // 1 設定用于填充用這支筆生成的筆畫的筆刷為給定的筆刷。
 2 void QPen::setBrush(const QBrush &brush)
 3 QBrush QPen::brush() const  
 4 // 2 将筆樣式設定為給定的樣式。正方形線的終點、圓形線的終點
 5 void QPen::setCapStyle(Qt::PenCapStyle style)    
 6 Qt::PenCapStyle QPen::capStyle() const    
 7 // 3 将這支筆的筆刷的顔色設定為給定的顔色。
 8 void QPen::setColor(const QColor &color)    
 9 QColor QPen::color() const  
10 // 4 根據彩妝值将此筆設定為彩妝或非彩妝。 
11 void QPen::setCosmetic(bool cosmetic)    
12 // 5 設定筆的偏移量
13 void QPen::setDashOffset(qreal offset)    
14 // 6 将該筆的橫線模式設定為給定的模式。(畫出來的線是虛實結合的線,線長由參數控制)
15 void QPen::setDashPattern(const QVector<qreal> &pattern)    
16 // 7 将筆的連接配接樣式設定為給定的樣式 (折線,折點處的樣式,銳角、鈍角、圓角)    
17 void QPen::setJoinStyle(Qt::PenJoinStyle style)    
18 // 8 将鋼筆樣式設定為給定的樣式  實線、線段線、點線、線段與點結合線 等
19 void QPen::setStyle(Qt::PenStyle style)    
20 // 9 以整數精度将筆的寬度設定為給定的像素寬度。
21 void QPen::setWidth(int width)    
22 // 10 以浮點精度将筆的寬度設定為給定的像素寬度。
23 void QPen::setWidthF(qreal width)
           

如何給圖元綁定事件?

1 // 1 建立新的類 MyItem2 繼承 QGraphicsPathItem,重新實作點選、懸浮等函數
 2 
 3 // myitem2.h
 4 #ifndef MYITEM2_H
 5 #define MYITEM2_H
 6 
 7 #include <QGraphicsItem>
 8 #include <QGraphicsSceneEvent>
 9 #include <QPen>
10 
11 // 點選該控件時,調用該函數
12 typedef void (*ClickHandle)(int type,void *other);
13 
14 class MyItem2 : public QGraphicsPathItem
15 {
16 
17 public:
18     explicit MyItem2(QGraphicsItem *parent = nullptr);
19 
20 protected:
21     // 重新實作這些函數
22     void keyPressEvent(QKeyEvent *event);
23     void mousePressEvent(QGraphicsSceneMouseEvent *event);
24     void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
25     void hoverLeaveEvent (QGraphicsSceneHoverEvent * event);
26     void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
27     void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
28 public:
29 
30     void setID(int ID);
31     void setClicKHandle(ClickHandle click,void * other);
32     QPainterPath path;
33 private:
34     int ID;
35     ClickHandle click;
36     void * other;
37     QPen pen;
38 
39 };
40 
41 #endif // MYITEM2_H
           
1 #include "myitem2.h"
 2 #include <QDebug>
 3 
 4 QPainterPath path;
 5 
 6 MyItem2::MyItem2(QGraphicsItem *parent) : QGraphicsPathItem(parent)
 7 {
 8     this->setAcceptHoverEvents(true);
 9 }
10 
11 void MyItem2::keyPressEvent(QKeyEvent *event)
12 {
13 //    qDebug() << "鍵盤按下";
14 }
15 void MyItem2::mousePressEvent(QGraphicsSceneMouseEvent *event)
16 {
17 //    qDebug() << "滑鼠按下";
18     pen.setColor(QColor(0,0,128,150));
19     pen.setWidth(6);
20     this->setPen(pen);
21     click(ID,other);
22 }
23 void MyItem2::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
24 {
25 //    qDebug() << "滑鼠進入";
26     pen.setColor(QColor(138,43,226,200));
27     pen.setWidth(6);
28     this->setPen(pen);
29 }
30 void MyItem2::hoverLeaveEvent (QGraphicsSceneHoverEvent * event)
31 {
32 //    qDebug() << "滑鼠離開";
33     pen.setColor(QColor(138,43,226,150));
34     pen.setWidth(4);
35     this->setPen(pen);
36 }
37 void MyItem2::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
38 {
39 //    qDebug() << "滑鼠右鍵松開";
40 }
41 void MyItem2::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
42 {
43 //    qDebug() << "滑鼠移動";
44 }
45 
46 void MyItem2::setID(int ID)
47 {
48     this->ID = ID;
49 }
50 
51 void MyItem2::setClicKHandle(ClickHandle click,void * other)
52 {
53     this->click = click;
54     this->other = other;
55 
           
本文福利,莬費領取Qt開發學習資料包、技術視訊,内容包括(C++語言基礎,Qt程式設計入門,QT信号與槽機制,QT界面開發-圖像繪制,QT網絡,QT資料庫程式設計,QT項目實戰,QSS,OpenCV,Quick子產品,面試題等等)↓↓↓↓↓↓見下面↓↓文章底部點選莬費領取↓↓

繼續閱讀