QGraphicsItem的使用
生活随笔
收集整理的這篇文章主要介紹了
QGraphicsItem的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如何在設計界面中添加QGraphicsView控件?
1 打開設計界面,點開Display Widgets,將Graphics Widget 控件拖動到界面上即可。QGraphicsView組成單元
-QGraphicsView(視圖) ---QGraphicsScene(場景) -----QGraphicsItem(圖元) QGraphicsView提供一個可視的窗口,用于顯示場景中的圖元,一個場景中可以有多個視圖。 QGraphicsScene本身不可見,是一個存儲圖元的容器,必須通過與之相連的QGraphicsView視圖來顯示及與外界進行交互,主要提供圖元的操作接口、傳遞事件和管理各個圖元狀態。 QGraphicsItem是場景中各個圖元的基礎類。 QGraphicsItem圖元主要特性如下: A、支持鼠標按下、移動、釋放、雙擊、懸停、滾動和右鍵菜單事件。 B、支持鍵盤輸入焦點和按鍵事件 C、支持拖拽事件 D、支持分組,使用父子關系和QGraphicsItemGroup E、支持碰撞檢測 GraphicsView是一個基于圖元的Model/View架構的框架,每一個組件都是一個獨立的元素。。GraphicsView繪圖時首先創建一個場景,然后創建圖元對象(如一個直線對象、一個多邊形對象),再使用場景的add()函數,將圖元對象添加到場景中,最后通過視圖進行顯示。對于復雜的圖像來說,如果圖像包含大量的直線、曲線、多邊形等圖元對象,管理圖元對象比管理QPainter的繪制過程語句要容易,并且圖元對象更符合面向對象的思想,圖形的可復用性更好。QGraphicsView類方法
// 1 返回位置為 QPoint 的項,如果有多項,則返回最上面那個項 QGraphicsItem *itemAt(const QPoint &pos) const // 2 返回關聯場景中的所有項 QList<QGraphicsItem *> items() const // 3 返回有Rect包含或與Rect相交的所有項的列表、這些項按堆疊順序排列(第一項是最上面的項) QList<QGraphicsItem *> items(const QRect &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const QList<QGraphicsItem *> items(int x, int y, int w, int h, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const // 4 返回當前視圖中的場景,如過沒有,返回nullptr QGraphicsScene *scene() const // 5 設置場景的可視化區域 (超出的部分,會出現滾動條) void setSceneRect(const QRectF &rect) void setSceneRect(qreal x, qreal y, qreal w, qreal h) // 6 設置場景在視圖中的對齊方式,默認為居中對齊 void setAlignment(Qt::Alignment alignment) // 7 設置視圖中的場景背景筆刷 QBrush backgroundBrush() const void setBackgroundBrush(const QBrush &brush) // 8 設置場景可否被鼠標左鍵拖動,默認無法被拖動 QGraphicsView::DragMode dragMode() const void setDragMode(QGraphicsView::DragMode mode) // 9 設置前景筆刷 QBrush foregroundBrush() const void setForegroundBrush(const QBrush &brush) // 10 是否運行場景交互(響應鼠標事件) bool isInteractive() const void setInteractive(bool allowed) // 11 設置場景 void setScene(QGraphicsScene *scene)QGraphicsScene類方法
// 1 添加子項目 void QGraphicsScene::addItem(QGraphicsItem *item) // 2 移除子項目 void QGraphicsScene::removeItem(QGraphicsItem *item) // 3 添加直線項 QGraphicsLineItem *QGraphicsScene::addLine(const QLineF &line, const QPen &pen = QPen()) QGraphicsLineItem *QGraphicsScene::addLine(qreal x1, qreal y1, qreal x2, qreal y2, const QPen &pen = QPen()) // 4 添加橢圓項 QGraphicsEllipseItem *addEllipse(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush()) QGraphicsEllipseItem *addEllipse(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush()) // 5 添加路徑項 QGraphicsPathItem *QGraphicsScene::addPath(const QPainterPath &path, const QPen &pen = QPen(), const QBrush &brush = QBrush()) // 6 添加圖片項 QGraphicsPixmapItem *QGraphicsScene::addPixmap(const QPixmap &pixmap) // 7 添加矩形項 QGraphicsRectItem *addRect(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush()) QGraphicsRectItem *addRect(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush()) // 8 添加文本項 QGraphicsTextItem *QGraphicsScene::addText(const QString &text, const QFont &font = QFont()) // 9 添加多邊形項 QGraphicsPolygonItem *addPolygon(const QPolygonF &polygon, const QPen &pen = QPen(), const QBrush &brush = QBrush()) // 9 添加裝置項 QGraphicsProxyWidget *QGraphicsScene::addWidget(QWidget *widget, Qt::WindowFlags wFlags = Qt::WindowFlags()) // 10 設置場景的背景畫刷 QBrush backgroundBrush() const // 11 清除焦點 void clearFocus() // 12 獲取與選定項目包含或相交的項 QList<QGraphicsItem *> collidingItems(const QGraphicsItem *item, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const // 13 將一些項添加到一個分組中,并返回該分組的指針 QGraphicsItemGroup *QGraphicsScene::createItemGroup(const QList<QGraphicsItem *> &items) // 14 拆除分組 void QGraphicsScene::destroyItemGroup(QGraphicsItemGroup *group) // 15 設置字體 會觸發 FontChange 信號 QFont font() const void setFont(const QFont &font) // 16 設置前景筆刷 QBrush foregroundBrush() const void setForegroundBrush(const QBrush &brush) // 17 獲取場景的高度 qreal height() const // 18 獲取場景的寬度 qreal width() const // 19 查看場景是否是活動的 bool isActive() const // 20 返回位置為 QPoint 的項,如果有多項,則返回最上面那個項 QGraphicsItem *itemAt(const QPointF &position, const QTransform &deviceTransform) const QGraphicsItem *itemAt(qreal x, qreal y, const QTransform &deviceTransform) const // 21 返回場景中的所有項 QList<QGraphicsItem *> items(Qt::SortOrder order = Qt::DescendingOrder) const // 22 返回場景中的所有與該點相交的項 QList<QGraphicsItem *> items(const QPointF &pos, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const // 23 返回有Rect包含或與Rect相交的所有項的列表、這些項按堆疊順序排列(第一項是最上面的項) QList<QGraphicsItem *> items(const QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const // 24 返回場景中的所有與該路徑相交的項 QList<QGraphicsItem *> items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const // 25 返回場景中正在被鼠標抓取的項目(正在拖動的項目?) QGraphicsItem *mouseGrabberItem() const // 26 移除所有項目 void removeItem(QGraphicsItem *item) // 27 設置場景范圍 QRectF sceneRect() const void setSceneRect(const QRectF &rect) void setSceneRect(qreal x, qreal y, qreal w, qreal h) // 28 事件過濾器 bool QGraphicsScene::sendEvent(QGraphicsItem *item, QEvent *event) // 29 激活項目\部件 void setActivePanel(QGraphicsItem *item) void setActiveWindow(QGraphicsWidget *widget) // 30 設置場景的背景畫刷 QBrush backgroundBrush() const void setBackgroundBrush(const QBrush &brush) // 31 設置調色板 QPalette palette() const void setPalette(const QPalette &palette) // 32 設置樣式 void setStyle(QStyle *style) QStyle *style() const // 33 返回所有包含此場景的視圖 QList<QGraphicsView *> views() const // 34 尚不清楚 void update(qreal x, qreal y, qreal w, qreal h)QGraphicsItem類方法
// 1 設置拖動事件,默認為不接受 void QGraphicsItem::setAcceptDrops(bool on); bool QGraphicsItem::acceptDrops() const // 2 設置懸浮事件,默認為不接受 void QGraphicsItem::setAcceptHoverEvents(bool enabled) bool QGraphicsItem::acceptHoverEvents() const // 2.1 懸停進入,默認實現調用 updata void QGraphicsItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) // 2.2 懸停移動 void QGraphicsItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event) // 2.3 懸停離開,默認實現調用 updata void QGraphicsItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) // 3 設置觸摸事件,默認為不接受 void QGraphicsItem::setAcceptTouchEvents(bool enabled) bool QGraphicsItem::acceptTouchEvents() const // 4 設置該項接受鼠標事件的鼠標按鈕,默認情況是接受的,如果不接受,鼠標事件傳遞到下面一項Item void QGraphicsItem::setAcceptedMouseButtons(Qt::MouseButtons buttons) Qt::MouseButtons QGraphicsItem::acceptedMouseButtons() const // 5 設置活動狀態 void QGraphicsItem::setActive(bool active) // 6 設置邊界的粒度,范圍0~1,默認為0最低粒度 void QGraphicsItem::setBoundingRegionGranularity(qreal granularity) qreal QGraphicsItem::boundingRegionGranularity() const // 7 設置光標 void setCursor(const QCursor &cursor) // 8 設置屬性 void QGraphicsItem::setData(int key, const QVariant &value) QVariant QGraphicsItem::data(int key) const // 9 是否禁用,默認false,不禁用 void QGraphicsItem::setEnabled(bool enabled) bool QGraphicsItem::isEnabled() const // 10 是否過濾子item事件,默認為false,不過濾,當設置為true時,所有子item事件在父item觸發 void QGraphicsItem::setFiltersChildEvents(bool enabled) bool QGraphicsItem::filtersChildEvents() const // 11 設置標志 void setFlag(QGraphicsItem::GraphicsItemFlag flag, bool enabled = true) void setFlags(QGraphicsItem::GraphicsItemFlags flags) // 12 設置鍵盤焦點 void QGraphicsItem::setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason) // 13 設置代理焦點 void QGraphicsItem::setFocusProxy(QGraphicsItem *item) // 14 設置效果 模糊、不透明度、顏色陰影等 void QGraphicsItem::setGraphicsEffect(QGraphicsEffect *effect) // 15 添加到組中 void QGraphicsItem::setGroup(QGraphicsItemGroup *group) // 16 為輸入法設置提升 void QGraphicsItem::setInputMethodHints(Qt::InputMethodHints hints) // 17 設置不透明度,范圍為 0~1 ,默認為傳遞到子組件中 void QGraphicsItem::setOpacity(qreal opacity) qreal QGraphicsItem::effectiveOpacity() const // 18 設置是否可見 void QGraphicsItem::setVisible(bool visible) // 19 設置模式 是否阻塞父、父父。。。 等面板的輸入 void QGraphicsItem::setPanelModality(QGraphicsItem::PanelModality panelModality) QGraphicsItem::PanelModality QGraphicsItem::panelModality() const // 20 設置父項(將從舊父項child中移除) 查看父|子項 void QGraphicsItem::setParentItem(QGraphicsItem *newParent) QGraphicsItem *QGraphicsItem::parentItem() const QGraphicsObject *QGraphicsItem::parentObject() const QGraphicsWidget *QGraphicsItem::parentWidget() const QList<QGraphicsItem *> QGraphicsItem::childItems() const // 21 設置坐標 void QGraphicsItem::setPos(const QPointF &pos) void QGraphicsItem::setPos(qreal x, qreal y) QPointF QGraphicsItem::pos() const // 22 設置旋轉角度 -360~360 void QGraphicsItem::setRotation(qreal angle) qreal QGraphicsItem::rotation() const // 23 設置項的比例因子 成倍的放大或縮小 void QGraphicsItem::setScale(qreal factor) qreal QGraphicsItem::scale() const // 24 設置是否被選中(前提為可選) void QGraphicsItem::setSelected(bool selected) // 25 設置工具提示 void QGraphicsItem::setToolTip(const QString &toolTip) QString QGraphicsItem::toolTip() const // 26 設置轉換矩陣 void QGraphicsItem::setTransform(const QTransform &matrix, bool combine = false) QTransform QGraphicsItem::transform() const QTransform QGraphicsItem::deviceTransform(const QTransform &viewportTransform) const // 27 在項坐標中設置轉換的原點。 void QGraphicsItem::setTransformOriginPoint(const QPointF &origin) void QGraphicsItem::setTransformOriginPoint(qreal x, qreal y) QPointF QGraphicsItem::transformOriginPoint() const // 28 設置動畫列表 void QGraphicsItem::setTransformations(const QList<QGraphicsTransform *> &transformations) // 29 設置堆疊順序,高的項總在低的項上面 void QGraphicsItem::setZValue(qreal z) // 30 以路徑的形式返回項的形狀 QPainterPath QGraphicsItem::shape() const // 31 返回圖形項 QGraphicsObject *QGraphicsItem::toGraphicsObject() // 32 返回最頂層的父項(祖先項),如果沒有父項,則返回自己 QGraphicsItem *QGraphicsItem::topLevelItem() const // 33 返回最頂層的父項Widget QGraphicsWidget *QGraphicsItem::topLevelWidget() const // 34 設置在其它項之上 (z值相同時,才能生效) void QGraphicsItem::stackBefore(const QGraphicsItem *sibling) // 35 釋放鍵盤抓取 void QGraphicsItem::ungrabKeyboard() // 36 釋放鼠標抓取 void QGraphicsItem::ungrabMouse() // 37 清除該項中的游標。 void QGraphicsItem::unsetCursor() // 38 計劃重繪這個項目中由rect覆蓋的區域。 void QGraphicsItem::update(const QRectF &rect = QRectF()) void QGraphicsItem::update(qreal x, qreal y, qreal width, qreal height) // 39 返回項目的窗口,如果該項目沒有窗口,則返回nullptr。 QGraphicsWidget *QGraphicsItem::window() const // 40 返回重繪的矩形(虛函數,需自己實現) QRectF QGraphicsItem::boundingRect() const // 41 返回該項的邊界區域 QRegion QGraphicsItem::boundingRegion(const QTransform &itemToDeviceTransform) const // 42 將項目的緩存模式設置為模式。默認無緩存 void QGraphicsItem::setCacheMode(QGraphicsItem::CacheMode mode, const QSize &logicalCacheSize = QSize()) QGraphicsItem::CacheMode QGraphicsItem::cacheMode() const // 43 返回該項子項的邊界矩形。 QRectF QGraphicsItem::childrenBoundingRect() const // 44 返回該項目的剪輯路徑, QPainterPath QGraphicsItem::clipPath() const // 45 判斷該項在某種重疊方式下是否與其他項重疊 bool QGraphicsItem::collidesWithItem(const QGraphicsItem *other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const // 46 判斷該項在某種重疊方式下是否與路徑重疊 bool QGraphicsItem::collidesWithPath(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const // 47 返回所有與該項重疊的項 QList<QGraphicsItem *> QGraphicsItem::collidingItems(Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const // 48 返回此項和其他項的最接近的公共祖先項 QGraphicsItem *QGraphicsItem::commonAncestorItem(const QGraphicsItem *other) const // 49 如果該項包含點則返回true。 virtual bool contains(const QPointF &point) const // 50 設置標志 void QGraphicsItem::setFlags(QGraphicsItem::GraphicsItemFlags flags) void QGraphicsItem::setFlag(QGraphicsItem::GraphicsItemFlag flag, bool enabled = true) QGraphicsItem::GraphicsItemFlags QGraphicsItem::flags() const // 51 水平移動 void QGraphicsItem::moveBy(qreal dx, qreal dy) // 52 這個虛函數返回一個表示該項不透明區域的形狀。 QPainterPath QGraphicsItem::opaqueArea() const // 53 返回項的面板,如果該項沒有面板,則返回nullptr。我的項目是一個面板,它將返回本身。否則,它將返回最近的前面板。 QGraphicsItem *QGraphicsItem::panel() const // 54 返回該項的當前場景,如果該項沒有存儲在場景中,則返回nullptr QGraphicsScene *QGraphicsItem::scene() const // 55 返回該項目在場景坐標中的邊界矩形, QRectF QGraphicsItem::sceneBoundingRect() const // 56 返回項目在場景坐標中的位置。 QPointF QGraphicsItem::scenePos() const // 57 通過dx, dy滾動rect的內容。如果rect是一個空矩形(默認),項目的邊界矩形會滾動。 void QGraphicsItem::scroll(qreal dx, qreal dy, const QRectF &rect = QRectF()) // 58 設置此項目的筆。 void QAbstractGraphicsShapeItem::setPen(const QPen &pen) // 59 設置項目的筆刷為筆刷。 void QAbstractGraphicsShapeItem::setBrush(const QBrush &brush)簡單demo
// .h #include <QGraphicsView> #include <QGraphicsItem>QGraphicsView * graphicsView; // 定義視圖 QGraphicsScene graphicsScene; // 定義場景 QGraphicsPathItem graphicsPathItem; // 定義路徑類圖元 QPainterPath path; // 定義路徑 QPen pen; // 定義畫筆 // .cpp graphicsView = ui->graphicsView; // 獲取UI上的視圖 graphicsView->setScene(&graphicsScene); // 將場景添加到視圖中pen.setColor(QColor(0,0,128,150)); // 設置畫筆顏色 pen.setWidth(6); // 設置畫筆寬度 graphicsPathItem->setPen(pen); // 圖元綁定畫筆 path.addRect(0,0,60,60); // 在路徑中添加矩形 path.addText(QPoint(0,30),QFont("微軟雅黑", 15, QFont::Thin),"電臺一"); // 在路徑中添加文字graphicsPathItem.setPath(path); // 將路徑添加到圖元中 graphicsScene.addItem(&graphicsPathItem); // 將圖元添加到場景中/*----------------------------------- 更新視圖的方式 -------------------------------------*/ // 只需更新圖元即可 path.addRect(20,20,60,60); // 更新路徑 graphicsPathItem.setPath(path); // 更新圖元QPainterPath類方法
// 1 在指定的邊界矩形內創建一個橢圓,并將其作為封閉的子路徑添加到畫家路徑中。 void QPainterPath::addEllipse(const QRectF &boundingRectangle) void QPainterPath::addEllipse(qreal x, qreal y, qreal width, qreal height) // 2 將給定的路徑作為封閉的子路徑添加到此路徑。 void QPainterPath::addPath(const QPainterPath &path) // 3 將給定的多邊形作為(未閉合的)子路徑添加到路徑中。 void QPainterPath::addPolygon(const QPolygonF &polygon) // 4 將給定的矩形作為封閉的子路徑添加到此路徑。 void QPainterPath::addRect(const QRectF &rectangle) void QPainterPath::addRect(qreal x, qreal y, qreal width, qreal height) // 5 將給定的文本作為一組從提供的字體創建的封閉子路徑添加到此路徑。 void QPainterPath::addText(const QPointF &point, const QFont &font, const QString &text) void QPainterPath::addText(qreal x, qreal y, const QFont &font, const QString &text) // 6 以浮點精度的矩形返回此畫家路徑的邊界矩形。 QRectF QPainterPath::boundingRect() const // 7 清除存儲的路徑元素。 void QPainterPath::clear() // 8 通過在子路徑的開始處畫一條線來關閉當前的子路徑, void QPainterPath::closeSubpath() // 9 通過從路徑的最后一個元素添加一行到給定路徑的第一個元素,將給定路徑連接到此路徑。 void QPainterPath::connectPath(const QPainterPath &path) // 10 如果給定點在路徑內返回true,否則返回false。 bool QPainterPath::contains(const QPointF &point) const bool QPainterPath::contains(const QRectF &rectangle) const bool QPainterPath::contains(const QPainterPath &p) const // 11 返回路徑的當前位置。 QPointF QPainterPath::currentPosition() const // 12 將畫家路徑的填充規則設置為給定的填充規則。Qt提供了兩種填充路徑的方法:Qt::OddEvenFill (default) Qt::WindingFill void QPainterPath::setFillRule(Qt::FillRule fillRule) Qt::FillRule QPainterPath::fillRule() const // 13 從當前位置添加一條直線到給定端點 void QPainterPath::lineTo(const QPointF &endPoint) void QPainterPath::lineTo(qreal x, qreal y) // 14 將當前點移動到給定的點,隱式地啟動一個新的子路徑并關閉前一個。 void QPainterPath::moveTo(const QPointF &point) void QPainterPath::moveTo(qreal x, qreal y) // 15 返回指定長度len處的整個路徑的百分比。 qreal QPainterPath::percentAtLength(qreal len) const // 16 返回當前路徑百分比t處的點。參數t必須在O和1之間。 QPointF QPainterPath::pointAtPercent(qreal t) const // 17 在當前位置和給定端點之間添加一條二次貝塞爾曲線,控制點由c指定。 void QPainterPath::quadTo(const QPointF &c, const QPointF &endPoint) void QPainterPath::quadTo(qreal cx, qreal cy, qreal endPointX, qreal endPointY) // 18 返回此路徑的簡化版本 (合并版本) QPainterPath QPainterPath::simplified() const // 19 用這個繪制器路徑交換其他繪制器路徑。這個操作非???#xff0c;而且從不失敗。 void QPainterPath::swap(QPainterPath &other) // 20 創建并返回路徑的反向副本。 QPainterPath QPainterPath::toReversed() constQPen類方法
// 1 設置用于填充用這支筆生成的筆畫的筆刷為給定的筆刷。 void QPen::setBrush(const QBrush &brush) QBrush QPen::brush() const // 2 將筆樣式設置為給定的樣式。正方形線的終點、圓形線的終點 void QPen::setCapStyle(Qt::PenCapStyle style) Qt::PenCapStyle QPen::capStyle() const // 3 將這支筆的筆刷的顏色設置為給定的顏色。 void QPen::setColor(const QColor &color) QColor QPen::color() const // 4 根據彩妝值將此筆設置為彩妝或非彩妝。 void QPen::setCosmetic(bool cosmetic) // 5 設置筆的偏移量 void QPen::setDashOffset(qreal offset) // 6 將該筆的橫線模式設置為給定的模式。(畫出來的線是虛實結合的線,線長由參數控制) void QPen::setDashPattern(const QVector<qreal> &pattern) // 7 將筆的連接樣式設置為給定的樣式 (折線,折點處的樣式,銳角、鈍角、圓角) void QPen::setJoinStyle(Qt::PenJoinStyle style) // 8 將鋼筆樣式設置為給定的樣式 實線、線段線、點線、線段與點結合線 等 void QPen::setStyle(Qt::PenStyle style) // 9 以整數精度將筆的寬度設置為給定的像素寬度。 void QPen::setWidth(int width) // 10 以浮點精度將筆的寬度設置為給定的像素寬度。 void QPen::setWidthF(qreal width)如何給圖元綁定事件?
// 1 創建新的類 MyItem2 繼承 QGraphicsPathItem,重新實現點擊、懸浮等函數// myitem2.h #ifndef MYITEM2_H #define MYITEM2_H#include <QGraphicsItem> #include <QGraphicsSceneEvent> #include <QPen>// 點擊該控件時,調用該函數 typedef void (*ClickHandle)(int type,void *other);class MyItem2 : public QGraphicsPathItem {public:explicit MyItem2(QGraphicsItem *parent = nullptr);protected:// 重新實現這些函數void keyPressEvent(QKeyEvent *event);void mousePressEvent(QGraphicsSceneMouseEvent *event);void hoverEnterEvent(QGraphicsSceneHoverEvent *event);void hoverLeaveEvent (QGraphicsSceneHoverEvent * event);void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);void mouseMoveEvent(QGraphicsSceneMouseEvent *event); public:void setID(int ID);void setClicKHandle(ClickHandle click,void * other);QPainterPath path; private:int ID;ClickHandle click;void * other;QPen pen;};#endif // MYITEM2_H #include "myitem2.h" #include <QDebug>QPainterPath path;MyItem2::MyItem2(QGraphicsItem *parent) : QGraphicsPathItem(parent) {this->setAcceptHoverEvents(true); }void MyItem2::keyPressEvent(QKeyEvent *event) { // qDebug() << "鍵盤按下"; } void MyItem2::mousePressEvent(QGraphicsSceneMouseEvent *event) { // qDebug() << "鼠標按下";pen.setColor(QColor(0,0,128,150));pen.setWidth(6);this->setPen(pen);click(ID,other); } void MyItem2::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { // qDebug() << "鼠標進入";pen.setColor(QColor(138,43,226,200));pen.setWidth(6);this->setPen(pen); } void MyItem2::hoverLeaveEvent (QGraphicsSceneHoverEvent * event) { // qDebug() << "鼠標離開";pen.setColor(QColor(138,43,226,150));pen.setWidth(4);this->setPen(pen); } void MyItem2::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { // qDebug() << "鼠標右鍵松開"; } void MyItem2::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { // qDebug() << "鼠標移動"; }void MyItem2::setID(int ID) {this->ID = ID; }void MyItem2::setClicKHandle(ClickHandle click,void * other) {this->click = click;this->other = other; }總結
以上是生活随笔為你收集整理的QGraphicsItem的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: item在python中什么意思_Pyt
- 下一篇: IDM安装使用 解决下载限速