最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

QT中QGraphicsItem 獲取點坐標的幾種方法

 更新時間:2025年09月07日 11:05:04   作者:冷凝女子  
本文介紹了在Qt圖形視圖框架中獲取QGraphicsEllipseItem坐標的多種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在 Qt 圖形視圖框架中,從 QGraphicsItem(特別是點圖元)獲取坐標有多種方式,取決于你需要的是場景坐標、視圖坐標還是圖元自身的局部坐標。

1. 獲取圖元在場景中的位置

對于 QGraphicsEllipseItem(點圖元)

// 假設 item 是你的 QGraphicsEllipseItem 指針
if (QGraphicsEllipseItem* pointItem = qgraphicsitem_cast<QGraphicsEllipseItem*>(item)) {
    // 獲取圖元中心點在場景中的坐標
    QPointF scenePos = pointItem->scenePos();
    
    // 或者獲取包圍矩形的中心
    QRectF rect = pointItem->rect();
    QPointF centerInItem = rect.center();
    QPointF centerInScene = pointItem->mapToScene(centerInItem);
    
    qDebug() << "場景坐標:" << scenePos;
    qDebug() << "精確中心坐標:" << centerInScene;
}

2. 從 QMap<int, QGraphicsEllipseItem*> 獲取所有點坐標

QMap<int, QGraphicsEllipseItem*> pointMap; // 你的點圖元容器

// 遍歷獲取所有點坐標
for (auto it = pointMap.constBegin(); it != pointMap.constEnd(); ++it) {
    int id = it.key();
    QGraphicsEllipseItem* item = it.value();
    
    QPointF scenePos = item->scenePos();
    QRectF rect = item->rect();
    QPointF center = item->mapToScene(rect.center());
    
    qDebug() << "點ID:" << id << "場景坐標:" << center;
    
    // 如果需要視圖坐標(像素坐標)
    QPoint viewPos = mGraphicsView->mapFromScene(center);
    qDebug() << "視圖坐標:" << viewPos;
}

3. 響應點擊事件獲取坐標

// 在場景子類中重寫鼠標事件
void MyGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent* event) {
    QGraphicsScene::mousePressEvent(event); // 先讓基類處理選擇邏輯
    
    // 獲取點擊位置的圖元
    QGraphicsItem* item = itemAt(event->scenePos(), QTransform());
    
    if (item && (item->type() == QGraphicsEllipseItem::Type)) {
        QGraphicsEllipseItem* ellipse = static_cast<QGraphicsEllipseItem*>(item);
        QPointF center = ellipse->mapToScene(ellipse->rect().center());
        qDebug() << "點擊了點圖元,中心坐標:" << center;
    }
}

4. 獲取選中點的坐標

// 獲取當前選中的所有點圖元坐標
QList<QPointF> getSelectedPointsCoordinates() {
    QList<QPointF> coordinates;
    
    foreach (QGraphicsItem* item, mScene->selectedItems()) {
        if (item->type() == QGraphicsEllipseItem::Type) {
            QGraphicsEllipseItem* ellipse = static_cast<QGraphicsEllipseItem*>(item);
            coordinates.append(ellipse->mapToScene(ellipse->rect().center()));
        }
    }
    
    return coordinates;
}

5. 坐標轉(zhuǎn)換說明

Qt 圖形視圖框架有三級坐標系:

  • 圖元局部坐標:相對于圖元自身的坐標系
  • 場景坐標:所有圖元共用的全局坐標系
  • 視圖坐標:窗口部件的像素坐標系

常用轉(zhuǎn)換方法:

// 局部坐標 → 場景坐標
QPointF scenePos = item->mapToScene(localPos);

// 場景坐標 → 視圖坐標
QPoint viewPos = graphicsView->mapFromScene(scenePos);

// 視圖坐標 → 場景坐標
QPointF scenePos = graphicsView->mapToScene(viewPos);

注意事項

  • 如果圖元有旋轉(zhuǎn)或縮放,直接使用 scenePos() 可能不準確,建議使用 mapToScene(rect.center())
  • 確保在獲取坐標前圖元已被添加到場景中
  • 對于非常精確的坐標需求,考慮設置圖元的 CacheMode 為 DeviceCoordinateCache

到此這篇關于QT中QGraphicsItem 獲取點坐標的幾種方法的文章就介紹到這了,更多相關QT QGraphicsItem 獲取點坐標內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++實現(xiàn)基于時序公平的讀寫鎖詳解

    C++實現(xiàn)基于時序公平的讀寫鎖詳解

    讀寫鎖與普通的互斥鎖的區(qū)別在于有兩種上鎖方式:讀鎖和寫鎖,不用的用戶對同一個讀寫鎖獲取讀鎖是非互斥的,其他情況則是互斥的,本文小編將給大家詳細介紹C++實現(xiàn)基于時序公平的讀寫鎖,需要的朋友可以參考下
    2023-10-10
  • MFC中動態(tài)創(chuàng)建控件以及事件響應實現(xiàn)方法

    MFC中動態(tài)創(chuàng)建控件以及事件響應實現(xiàn)方法

    這篇文章主要介紹了MFC中動態(tài)創(chuàng)建控件以及事件響應實現(xiàn)方法,詳細講解了MFC中動態(tài)創(chuàng)建控件以及事件響應的概念與實現(xiàn)方法,具有一定的實用價值,需要的朋友可以參考下
    2014-10-10
  • C/C++中static,const,inline三種關鍵字詳細總結

    C/C++中static,const,inline三種關鍵字詳細總結

    以下是對C/C++中static,const,inline的三種關鍵字進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • C++之智能指針初步及棄用auto_ptr的原因分析

    C++之智能指針初步及棄用auto_ptr的原因分析

    這篇文章主要介紹了C++之智能指針初步及棄用auto_ptr的原因分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • C++中的狀態(tài)模式全解析

    C++中的狀態(tài)模式全解析

    這篇文章給大家介紹了C++中的狀態(tài)模式,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2026-01-01
  • C語言如何實現(xiàn)循環(huán)輸入

    C語言如何實現(xiàn)循環(huán)輸入

    這篇文章主要介紹了C語言如何實現(xiàn)循環(huán)輸入問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C語言中十六進制轉(zhuǎn)十進制兩種實現(xiàn)方法

    C語言中十六進制轉(zhuǎn)十進制兩種實現(xiàn)方法

    這篇文章主要介紹了C語言中十六進制轉(zhuǎn)十進制兩種實現(xiàn)方法的相關資料,需要的朋友可以參考下
    2017-01-01
  • opencv實現(xiàn)圖形輪廓檢測

    opencv實現(xiàn)圖形輪廓檢測

    這篇文章主要為大家詳細介紹了opencv實現(xiàn)圖形輪廓檢測,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C++中將Char轉(zhuǎn)換成String的4種方法

    C++中將Char轉(zhuǎn)換成String的4種方法

    本文主要介紹了C++中將Char轉(zhuǎn)換成String的4種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • C語言中多樣式的格式控制符的使用詳解

    C語言中多樣式的格式控制符的使用詳解

    C語言中的格式控制符類型繁多,雖然格式字符可能就那么幾個,但組合起來使得格式控制符變得多樣化,這對于C語言初學者來說無疑是一種痛苦,為此我將常見的格式控制符類型及意義總結一下,希望對大家有所幫助
    2023-03-03

最新評論

凤山市| 崇左市| 武平县| 新乡县| 通渭县| 香港 | 敦煌市| 米林县| 龙海市| 酉阳| 石门县| 庆安县| 潢川县| 宿迁市| 台山市| 大足县| 万盛区| 灵璧县| 丰镇市| 册亨县| 南阳市| 来安县| 余江县| 乐安县| 本溪市| 陕西省| 成武县| 嘉荫县| 古浪县| 新营市| 娱乐| 瑞安市| 洛浦县| 大丰市| 泸定县| 游戏| 龙泉市| 青铜峡市| 牟定县| 湛江市| 南开区|