Qt QGraphics簡述及例程 - QGraphicsView、QGraphicsScene和QGraphicsItem

Qt QGraphics簡述及例程

  • 引言
  • 一、簡單例程
  • 二、關于坐標系問題

引言

QGraphics*是Qt框架中,主要用于處理2D圖形項的顯示、交互和管理的模塊,包括QGraphicsView、QGraphicsScene和QGraphicsItem。提供了一套高效的場景-視圖架構,適合開發復雜的圖形應用程序,如繪圖工具、數據可視化、游戲等。該模塊通過分層設計平衡了靈活性與性能,是Qt中處理復雜圖形交互的首選方案。

  1. QGraphicsView
    用于顯示場景內容的視圖組件,支持縮放、旋轉、滾動等交互操作。多個視圖可以關聯同一個場景,實現不同視角的同步展示。
  2. QGraphicsScene
    作為容器管理所有圖形項(QGraphicsItem),負責場景的坐標系統、碰撞檢測、事件傳遞等。場景可以包含數百萬個項,但仍能保持高性能。
  3. QGraphicsItem
    所有圖形項的基類,提供位置、變換、碰撞、繪制等基本功能。常見的派生類包括QGraphicsEllipseItem(圓形)、QGraphicsRectItem(矩形)等。

一、簡單例程

簡單的比喻:QGraphicsScene是一個場景,QGraphicsItem是場景里物體 (可以是多個),QGraphicsView是看場景的視角。

  • 可拖動Item的效果展示:
    在這里插入圖片描述

  • 源碼:

#include <QApplication>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QGraphicsEllipseItem>
#include <QBrush>
#include <QPen>int main(int argc, char *argv[])
{QApplication app(argc, argv);// 創建一個場景QGraphicsScene scene;scene.setSceneRect(0, 0, 400, 300);// 創建一個矩形項并添加到場景QGraphicsRectItem *rectItem = new QGraphicsRectItem(50, 50, 100, 100);rectItem->setBrush(QBrush(Qt::blue));rectItem->setPen(QPen(Qt::black));rectItem->setFlag(QGraphicsItem::ItemIsMovable); // 允許拖動scene.addItem(rectItem);// 創建一個橢圓項并添加到場景QGraphicsEllipseItem *ellipseItem = new QGraphicsEllipseItem(200, 100, 150, 100);ellipseItem->setBrush(QBrush(Qt::red));ellipseItem->setPen(QPen(Qt::black));ellipseItem->setFlag(QGraphicsItem::ItemIsMovable); // 允許拖動scene.addItem(ellipseItem);// 創建一個視圖并設置場景QGraphicsView view(&scene);view.setWindowTitle("示例");view.resize(500, 400);view.show();return app.exec();
}

Qt QGraphics體系及刷新機制介紹:https://zhuanlan.zhihu.com/p/613637924

二、關于坐標系問題

Qt圖形視圖框架三–坐標系統簡介:https://blog.csdn.net/zhaoxd200808501/article/details/76177497

    1. QgraphicsScene的setSceneRect函數可以設置場景的位置(或者說View查看的位置)和大小。默認scene的中心和View的中心是重合的(默認Qt::AlignmentCenter),或者說默認原點(0,0)在中心,如下圖所示:
      在這里插入圖片描述
    QGraphicsScene *scene = new QGraphicsScene();scene->setBackgroundBrush(Qt::yellow);QGraphicsRectItem *rectItem = new QGraphicsRectItem(0, 0, 100, 100);scene->addItem(rectItem);//scene->setSceneRect(-50, -50, 100, 100);QGraphicsView *view = new QGraphicsView(scene);//view->setAlignment(Qt::AlignLeft|Qt::AlignTop);this->setCentralWidget(view);this->setGeometry(300, 300, 200, 200);
    1. 使用scene->setSceneRect(-50, -50, 100, 100)進行偏移,就是將view的查看的位置向左上都移動50 (也可以看作scene向右下移動50),由于默認Qt::AlignmentCenter,所有偏移是距離中心原點的距離,如下圖所示:
      在這里插入圖片描述
    1. 再設置view->setAlignment(Qt::AlignLeft|Qt::AlignTop);setSceneRect所設置的-50偏移,就是距離左上頂點的偏移,如下圖所示:
      在這里插入圖片描述

坐標系統問題總結:

  1. View和Scene的對齊方式,決定坐標系原點(0,0) (默認Qt::AlignmentCenter,中心作為原點),不是左上角為原點。
  2. setSceneRect設置的位置,是距離原點的位置。
  3. 換句話說就是,默認設置Scene的中心為坐標系原點,setSceneRect設置的(-50,-50)就是:View的中心在Scene中心左上方50處。

Qt工作筆記-QGraphicsView框架容易忽視的坐標問題-“畫布”QgraphicsScene到底放在了哪兒?:https://blog.csdn.net/qq78442761/article/details/80965627
一個例子,搞懂QGraphicsView,QGraphicsScene坐標系統以及sceneRect設置:https://blog.csdn.net/biewenwoaaaa/article/details/144597336

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/86726.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/86726.shtml
英文地址,請注明出處:http://en.pswp.cn/web/86726.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼隨想錄打卡第一天

文章講解&#xff1a;代碼隨想錄 視頻講解&#xff1a;手把手帶你撕出正確的二分法 | 二分查找法 | 二分搜索法 | LeetCode&#xff1a;704. 二分查找_嗶哩嗶哩_bilibili class Solution { public:int search(vector<int>& nums, int target) {int left0;//左邊界int…

時序數據庫全面解析與對比

文章目錄 1. 時序數據庫概述1.1 時序數據特點1.2 時序數據庫核心功能 2. 主流時序數據庫對比2.1 InfluxDB2.2 Prometheus2.3 TimescaleDB2.4 OpenTSDB2.5 TDengine 3. 全方位對比3.1 功能對比3.2 性能對比3.3 適用場景對比3.4 社區與生態 4. 選型建議4.1 根據數據規模選擇4.2 根…

【STM32CubeMX】ST官網MCU固件庫下載及安裝

用STM32CubeMX自帶的Updater更新固件包會遇到各種幺蛾子&#xff08;如下圖所示&#xff09;&#xff0c;所以干脆自己下載固件包&#xff0c;快速升級固件。 1. ST官網搜索你需要的MCU型號&#xff0c;并選擇需要的固件版本&#xff0c;我這里是H7的MCU所以就找H7&#xff08;…

青少年編程與數學 01-012 通用應用軟件簡介 13 網上學習資源

青少年編程與數學 01-012 通用應用軟件簡介 13 網上學習資源 一、什么是網上學習資源&#xff08;一&#xff09;網上學習資源的基本定義&#xff08;二&#xff09;網上學習資源的工作原理&#xff08;三&#xff09;網上學習資源的類型 二、網上學習資源的重要意義&#xff0…

Python Selenium 忽略證書錯誤

文章目錄 Python Selenium 忽略證書錯誤和忽略&#x1f527; **一、忽略 SSL 證書錯誤**1. **基礎配置&#xff08;適用于 Chrome/Firefox&#xff09;**2. **高級場景&#xff1a;指定證書指紋**3. **瀏覽器兼容方案** &#x1f507; **二、隱藏 DevTools 監聽提示**1. **禁用…

YOLOv8模型在RDK5開發板上的部署指南:.pt到.bin轉換與優化實踐

以下是針對在RDK5開發板(基于NVIDIA Jetson Orin平臺)部署YOLOv8模型的詳細技術指南,涵蓋從模型轉換、優化到部署的全流程: YOLOv8模型在RDK5開發板上的部署指南:.pt到.bin轉換與優化實踐 ——基于TensorRT的高性能嵌入式部署方案 第一章:技術背景與核心概念 1.1 RDK5開…

內網橫向-工作流

一、信息收集階段 操作 工具 / 命令 說明 系統基礎信息采集 systeminfo、whoami /user 查看系統版本、用戶 SID 等 域內用戶 / 組查詢 net user /domain、net group "domain admins" /domain 列出域用戶及管理員組 域控及網絡結構探測 nltest /dsgetdc、ip…

個人日記本小程序開發方案(使用IntelliJ IDEA)

個人日記本小程序開發方案(使用IntelliJ IDEA) 一、項目創建與環境配置 1. 新建項目 打開IDEA → New Project → JavaFX選擇JDK 11+版本添加必要依賴:<!-- pom.xml --> <dependencies><dependency><groupId

react快速開始項目模板

代碼倉庫 gitee 創建項目 首先保證安裝了node, 然后使用vite創建項目 vite npm create vite react-learn cd react-learn npm i 目錄結構 一個完整的前端項目需要: 狀態管理 在全局維護共有的狀態(數據), 讓頁面組件之間共享數據, 我們使用pinia路由 路由讓頁面之間可以…

scrapy+django+pyecharts+mysql 實現西安游客行為分析系統大屏_用戶畫像_空間分析_路線智能推薦

項目地址 link 此處展示部分結果 思路 描述性統計 可視化大屏 用戶畫像&#xff08;聚類&#xff0c;情感分析&#xff09; 空間分析

AC-DC-AC間接變頻電源設計方案(工頻50Hz→20KHz)

AC-DC-AC間接變頻電源設計方案(工頻50Hz→20KHz) 一、方案分析與選擇 1. 可選電路結構分析 方案1:二極管整流+Boost PFC+全橋逆變 優點: 輸入功率因數高(>0.99)直流電壓穩定可控輸出波形質量好缺點: 電路復雜度較高成本相對較高方案2:晶閘管相控整流+電容濾波+半…

七天學完十大機器學習經典算法-09.梯度提升算法:預測藝術的精進之道

接上一篇《七天學完十大機器學習經典算法-08.K均值聚類&#xff1a;無監督學習的萬能分箱術》 想象你在教一個學生解決復雜數學題&#xff1a;先讓他做基礎題&#xff0c;然后針對錯誤部分強化練習&#xff0c;再針對新錯誤繼續訓練...如此反復精進&#xff0c;直到完美掌握——…

數據庫(MYsql)

一、Mysql概述 數據庫&#xff1a;存儲數據的倉庫 &#xff0c;數據是有組織的進行存儲 數據庫管理系統&#xff1a;操縱和管理數據庫的大型軟件&#xff08;BBMS&#xff09; SQL&#xff1a;定義了一套操作關系型數據庫統一標準&#xff0c;操作關系型數據庫的編程語言 數…

【SpringBoot】Spring Boot + RESTful 技術實戰指南

在當今的軟件開發領域&#xff0c;Spring Boot 與 RESTful API 的結合已成為構建高效、可擴展 Web 應用的標配。本文將通過一個完整的項目示例&#xff0c;從知識鋪墊到部署上線&#xff0c;帶你一步步掌握 Spring Boot RESTful 的開發流程。 一、知識鋪墊 1.1 Spring Boot …

安卓中靜態和動態添加子 View 到容器

1.靜態添加子View 在XML布局文件中直接定義子View&#xff1a; <!-- activity_main.xml --> <LinearLayoutxmlns:android"http://schemas.android.com/apk/res/android"android:id"id/container"android:layout_width"match_parent"a…

【NLP】自然語言項目設計03

目錄 03模型構建 代碼架構核心設計說明 初步構建模型并進行訓練時遇到的一些問題 問題一&#xff1a;模型欠擬合 使用1 model - lstm 解釋使用lstm時無法正常的進行cudnn加速 使用2 model - transformer 項目簡介 訓練一個模型&#xff0c;實現歌詞仿寫生成 任務類型&am…

WebRTC(十二):DTLS

在 WebRTC 中的作用 DTLS&#xff08;Datagram Transport Layer Security&#xff09;是 TLS 的 UDP 版本&#xff0c;在 WebRTC 中用于&#xff1a; 安全協商加密密鑰對等驗證&#xff08;基于 X.509 證書 fingerprint&#xff09;為 SRTP/SRTCP 提供密鑰材料 WebRTC 不直接…

北大肖臻《區塊鏈技術與應用》學習筆記

區塊鏈學習筆記 \huge{區塊鏈學習筆記} 區塊鏈學習筆記 這是關于北京大學肖臻老師的《區塊鏈技術與應用》課程的學習筆記。 BTC的數據結構 hash pointers&#xff1a;既保存結構體的對應地址位置&#xff08;指針&#xff09;&#xff0c;又保存結構體對應映射的hash值&#…

MongoDB 驅動升級性能測試報告

測試背景 將 MongoDB Java 驅動從 4.11.5 升級至 5.5.1&#xff0c;并配合 Reactor Core 3.8.0-M4 進行性能對比測試。測試主要圍繞插入、查詢、更新和刪除四個核心操作進行。 環境配置 操作系統: Windows 11CPU: Intel Core? i7-14700F, 28 核心, 2.10 GHzJDK: OpenJDK 21.…

淘寶商品評論實時采集 API 接入指南:從零開始實戰開發

在電商數據分析領域&#xff0c;商品評論數據蘊含著用戶對產品的真實反饋&#xff0c;對商家優化產品、提升服務質量具有重要價值。本文將詳細介紹如何接入淘寶 API&#xff0c;實現商品評論的實時采集&#xff0c;從環境搭建到代碼實現進行全流程講解。 1. 淘寶api概述 淘寶…