国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qt — Graphics/View框架

這篇具有很好參考價(jià)值的文章主要介紹了Qt — Graphics/View框架。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


前言

Qt的Graphics/View框架被用來(lái)存放、顯示二維圖形元素,處理那些對(duì)圖形元素進(jìn)行操作的交互命令。


一、Qt圖形系統(tǒng)介紹

Qt 應(yīng)用程序的圖形界面包含各種控件,比如窗口、按鈕、滾動(dòng)條等。所有這些控件對(duì)象都具有一個(gè)共同的基類QWidget。一個(gè)QWidget對(duì)象是構(gòu)成圖形界面的基本單位。它能夠在屏幕上繪制自己,能夠處理鼠標(biāo)、鍵盤(pán)事件??丶嫉钠聊粎^(qū)域總是矩形的。在屏幕上顯示多個(gè)控件時(shí)會(huì)按照一定的順序逐個(gè)顯示。我們稱先被顯示的控件位于“底層”,后被顯示的位于“頂層”。當(dāng)多個(gè)控件所占區(qū)域重疊時(shí),頂層控件會(huì)遮擋底層控件。

我們知道,控件之間可以形成父子關(guān)系,比如對(duì)于一個(gè)對(duì)話框,其中的按鈕、滾動(dòng)條等為子控件,對(duì)話框?yàn)楦缚丶?。子控件常常作為父控件的?shù)據(jù)成員出現(xiàn),所以我們也稱一個(gè)父控件包含一個(gè)子控件,或者一個(gè)子控件被嵌入到一個(gè)父控件中。大部分控件都作為子控件出現(xiàn),沒(méi)有父控件的控件被稱為窗口。通常,一個(gè)窗口的四周具有邊框,其頂部具有一個(gè)標(biāo)題。Qt的QMainWindow以及QDialog是常用的窗口控件。父控件的尺寸較大,子控件的尺寸較小。當(dāng)子控件的部分或者全部落在父控件區(qū)域之外時(shí),只有位于父控件區(qū)域之內(nèi)的部分才會(huì)被繪制。一個(gè)圖形界面由多個(gè)控件層疊而成,父控件位于底層,而子控件位于頂層。Qt總會(huì)先繪制底層的控件再繪制頂層的控件,以形成層疊效果。

繪制一個(gè)幾何圖形需要做兩方面工作。

(1)計(jì)算該圖形中每個(gè)像素的坐標(biāo)位置。比如在繪制一個(gè)線段時(shí),我們往往只是給定起點(diǎn)、終點(diǎn)的坐標(biāo),繪制時(shí)就需要計(jì)算線段上任意一點(diǎn)的坐標(biāo)。雖然理論上一個(gè)線段有無(wú)窮多個(gè)點(diǎn),但是由于計(jì)算機(jī)屏幕、打印機(jī)等圖形輸出設(shè)備的分辨率是有限的,我們只需要計(jì)算該線段上有限個(gè)點(diǎn)的坐標(biāo),類QPainter負(fù)責(zé)完成此項(xiàng)任務(wù)。

(2)將計(jì)算出來(lái)的軌跡輸出到特定設(shè)備,比如屏幕或者打印機(jī),類QPainterDevice表示這些設(shè)備。

程序員通常使用QPainter的構(gòu)造函數(shù)QPainter ( QPaintDevice * device )構(gòu)造一個(gè)對(duì)象,調(diào)用該對(duì)象的圖形繪制函數(shù),即可在參數(shù)device所指的設(shè)備上繪制圖形。QPainter提供了豐富的圖形繪制函數(shù),經(jīng)常使用的圖形繪制函數(shù)如下。drawLine(),drawPolyline()和drawArc()分別繪制直線、折線、曲線,drawRect(),drawEllipse(),drawPolygon(),drawPie()分別繪制矩形、橢圓、多邊形、餡餅形。繪制前,我們可以調(diào)用setPen()設(shè)定線寬、線的顏色等參數(shù)。如果被繪制的圖形是封閉的,圖形內(nèi)部將被填充。函數(shù)setBrush()設(shè)置填充顏色、填充模式等。為了輸出文字,可以調(diào)用drawText(),而setFont()可以設(shè)置字體、字號(hào)等。

二、Graphics/View框架

Qt的Graphics/View框架被用來(lái)存放、顯示二維圖形元素,處理那些對(duì)圖形元素進(jìn)行操作的交互命令。

該框架包含3個(gè)核心類:QgraphicsItem,QgraphicsSceneQGraphicsView。QGraphicsItem表示被顯示的圖形元素。QGraphicsScene表示囊括了所有圖形元素的場(chǎng)景。該類只表示一個(gè)場(chǎng)景由哪些圖形元素組成,并不負(fù)責(zé)顯示其中的元素。QGraphicsView負(fù)責(zé)顯示一個(gè)場(chǎng)景中的部分或者全部圖形元素。一個(gè)場(chǎng)景可以對(duì)應(yīng)多個(gè)QGraphicsView對(duì)象,以顯示一個(gè)場(chǎng)景的不同區(qū)域,或者以不同的方式來(lái)顯示該場(chǎng)景。

Graphic/View框架還處理那些對(duì)圖形元素進(jìn)行操作的交互命令。例如,當(dāng)用戶單擊左鍵、試圖選擇某個(gè)圖形元素時(shí),QGraphicsView將鼠標(biāo)坐標(biāo)換算為QGraphicsScene的坐標(biāo),遍歷各個(gè)QGraphicsItem對(duì)象,判斷哪個(gè)圖形元素被單擊。

QGraphicsScene維護(hù)一個(gè)列表,記錄哪些圖形元素被選中。另外,它還維護(hù)一個(gè)數(shù)據(jù)結(jié)構(gòu),記錄哪個(gè)或者哪些圖形元素獲得聚焦。用戶的鍵盤(pán)事件經(jīng)由QGraphicsView傳遞給QGraphicsScene,后者將鍵盤(pán)事件傳遞給獲得聚焦的圖形元素。

Graphics View框架涉及如下圖所示的3個(gè)坐標(biāo)系。每個(gè)圖形元素(QGraphicsItem對(duì)象)有其自身的坐標(biāo)系,可以自由選擇原點(diǎn)位置,坐標(biāo)值具有浮點(diǎn)精度。所有圖形元素組成的場(chǎng)景(QGraphicsScene對(duì)象)擁有自己的坐標(biāo)系,可以自由選擇原點(diǎn)位置,坐標(biāo)值也具有浮點(diǎn)精度。以上兩個(gè)坐標(biāo)系和具體顯示設(shè)備(比如屏幕)無(wú)關(guān),所以它們的坐標(biāo)值具有浮點(diǎn)精度。每個(gè)視圖(QGraphicsView對(duì)象)也擁有自己的坐標(biāo)系。由于這個(gè)坐標(biāo)系和具體顯示設(shè)備密切相關(guān),而任何一個(gè)顯示設(shè)備的分辨率都是有限的,因而這個(gè)坐標(biāo)系中的坐標(biāo)值只能是整數(shù),不能是浮點(diǎn)數(shù)。該坐標(biāo)系的坐標(biāo)原點(diǎn)被固定為視圖左上角。以上3個(gè)類的成員函數(shù)僅使用與該類對(duì)應(yīng)的坐標(biāo)系。

graphicsview控件,Qt,C++,qt,開(kāi)發(fā)語(yǔ)言,ui

場(chǎng)景中的圖形元素在二維空間上可能發(fā)生部分或者全部重疊,稱為圖形元素之間的碰撞。有些應(yīng)用場(chǎng)合允許碰撞的發(fā)生,比如在類似于Visio這樣的繪圖程序中,用戶可以將一個(gè)橢圓元素和一個(gè)文本元素重疊,得到一個(gè)內(nèi)部有文字標(biāo)注的橢圓圖形。而其他一些應(yīng)用場(chǎng)合則禁止碰撞的發(fā)生。比如在電路板布線程序中,表示電子元件的圖形元素不能夠碰撞。碰撞的檢測(cè)是由QGraphicsScene和QGraphicsItem協(xié)作完成的。QGraphicsItem有一個(gè)虛函數(shù)shape(),負(fù)責(zé)返回其自身的輪廓。QGraphicsScene的成員函數(shù)collidingItems()負(fù)責(zé)查詢場(chǎng)景中每個(gè)圖形元素的輪廓,判斷哪些元素和某個(gè)指定的元素相撞。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-770030.html

到了這里,關(guān)于Qt — Graphics/View框架的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 利用QT 的 Graphics View 系統(tǒng)實(shí)現(xiàn)一個(gè) 簡(jiǎn)易的 Graph Editor

    利用QT 的 Graphics View 系統(tǒng)實(shí)現(xiàn)一個(gè) 簡(jiǎn)易的 Graph Editor

    QT 中的 Graphics View 系統(tǒng). 是一個(gè)相對(duì)成熟的渲染引擎的上層框架,通常也可以會(huì)叫做 Scene - View。 通常會(huì)有 QGraphicsView, QGraphicsScene, QGraphicsItem 這幾個(gè)類構(gòu)成。 view是視口(viewport);scene是一個(gè)場(chǎng)景,負(fù)責(zé)容納各種item;而item就是可見(jiàn)的這些元件。 一般來(lái)說(shuō),繪圖可以使用 QPainte

    2024年02月02日
    瀏覽(23)
  • [QT編程系列-3]:C++圖形用戶界面編程,QT框架快速入門(mén)培訓(xùn) - 2- QT程序的運(yùn)行框架:HelloWorld、常見(jiàn)控件、對(duì)象樹(shù)原理

    [QT編程系列-3]:C++圖形用戶界面編程,QT框架快速入門(mén)培訓(xùn) - 2- QT程序的運(yùn)行框架:HelloWorld、常見(jiàn)控件、對(duì)象樹(shù)原理

    目錄 2.?QT程序的運(yùn)行框架 2.1 Hello World程序框架 2.2 QT Designer初識(shí) 2.3 用QT Designer設(shè)計(jì)用戶登錄界 上述示例代碼中,首先根據(jù)應(yīng)用程序的需求使用 QCoreApplication 或 QApplication 定義 app 對(duì)象。如果你的應(yīng)用程序需要圖形界面,則使用 QApplication,否則使用 QCoreApplication。然后,你可以

    2024年02月15日
    瀏覽(23)
  • 一文帶你了解QT Model/View框架的設(shè)計(jì)思想和實(shí)現(xiàn)機(jī)制

    一文帶你了解QT Model/View框架的設(shè)計(jì)思想和實(shí)現(xiàn)機(jī)制

    目錄 1、QT Model/View框架簡(jiǎn)介 1.1、QT Model/View是什么? 1.2、QT Model/View框架核心思想 1.3、Model/View框架工作機(jī)制 1.4、Model/View框架的類 2、Model 2.1模型簡(jiǎn)介 2.2、模型索引 2.3、數(shù)據(jù)角色 2.4、QStringListModel 2.5、QFileSystemModel 2.6、QSortFilterProxyModel 3、View 4、Delegate 5、項(xiàng)選擇模型 5.1、QIt

    2024年02月05日
    瀏覽(89)
  • Qt 之tableView控件C++語(yǔ)言

    table view是用的比較多的一個(gè)控件之一,我們?cè)谡故緮?shù)據(jù)或者表格的時(shí)候經(jīng)常用到。 1、添加表頭 2、 添加行數(shù)據(jù) 3、 獲取雙擊事件 4、獲取選中行內(nèi)容 5、刪除行 以上就是QT中TABLE VIEW的使用,其實(shí)還有很多屬性可以設(shè)置,比如是否隱藏表頭呀,是否顯示網(wǎng)格線呀,QSS樣式設(shè)置

    2024年02月13日
    瀏覽(20)
  • 【QT開(kāi)發(fā)筆記-基礎(chǔ)篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget

    【QT開(kāi)發(fā)筆記-基礎(chǔ)篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget

    【QT開(kāi)發(fā)筆記-基礎(chǔ)篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget(1) QTableWidget 是 Qt 中的表格控件,可以行列的形式來(lái)展示數(shù)據(jù) QTableWidget 有很多屬性和方法,完整的可查看幫助文檔。 在窗口上放置一個(gè) QTableWidget 控件后,既可以在設(shè)計(jì)師 UI 界面來(lái)編輯屬性和添加數(shù)據(jù),也

    2024年02月12日
    瀏覽(31)
  • 基于Qt5的圖像交互控件開(kāi)發(fā)(C++實(shí)現(xiàn))

    基于Qt5的圖像交互控件開(kāi)發(fā)(C++實(shí)現(xiàn))

    博主近期看到海康VM、halcon以及visionpro視覺(jué)軟件都包含一個(gè)圖像智能交互控件,然后近期根據(jù)其中的技術(shù)原理,也基于Qt5仿照開(kāi)發(fā)了一個(gè)類似的功能,包含矩形、旋轉(zhuǎn)矩形、任意多邊形、圓、圓環(huán)、扇環(huán),直線卡尺以及圓卡尺等常用控件,圖像智能交互是在計(jì)算機(jī)視覺(jué)領(lǐng)域中

    2024年02月05日
    瀏覽(65)
  • C++ Qt框架開(kāi)發(fā) | 基于Qt框架開(kāi)發(fā)實(shí)時(shí)成績(jī)顯示排序系統(tǒng)(3) 保存表格數(shù)據(jù)

    C++ Qt框架開(kāi)發(fā) | 基于Qt框架開(kāi)發(fā)實(shí)時(shí)成績(jī)顯示排序系統(tǒng)(3) 保存表格數(shù)據(jù)

    對(duì)上兩篇篇的工作C++ Qt框架開(kāi)發(fā)| 基于Qt框架開(kāi)發(fā)實(shí)時(shí)成績(jī)顯示排序系統(tǒng)(1)-CSDN博客和C++ Qt框架開(kāi)發(fā) | 基于Qt框架開(kāi)發(fā)實(shí)時(shí)成績(jī)顯示排序系統(tǒng)(2)折線圖顯示-CSDN博客繼續(xù)優(yōu)化,增加一個(gè) 保存按鈕,用于保存成績(jī)數(shù)據(jù)。 1)在ui界面添加一個(gè)按鈕 ? ? ? ? 將其命名為saveBtn。

    2024年02月19日
    瀏覽(32)
  • 05-1_Qt 5.9 C++開(kāi)發(fā)指南_Model/View結(jié)構(gòu)基礎(chǔ)(基本原理;數(shù)據(jù)模型;試圖組件;代理)

    05-1_Qt 5.9 C++開(kāi)發(fā)指南_Model/View結(jié)構(gòu)基礎(chǔ)(基本原理;數(shù)據(jù)模型;試圖組件;代理)

    Model/View(模型/視圖) 結(jié)構(gòu)是 Qt 中用界面組件顯示與編輯數(shù)據(jù)的一種結(jié)構(gòu),視圖 (View)是顯示和編輯數(shù)據(jù)的界面組件,模型 (Model) 是視圖與原始數(shù)據(jù)之間的接口。 Model/View 結(jié)構(gòu)的典型應(yīng)用是在數(shù)據(jù)庫(kù)應(yīng)用程序中,例如數(shù)據(jù)庫(kù)中的一個(gè)數(shù)據(jù)表可以在一個(gè) OTableView 組件中顯示和編輯。

    2024年02月17日
    瀏覽(42)
  • 【[Qt]基于QChartView開(kāi)發(fā)的圖表顯示控件,支持實(shí)時(shí)顯示,動(dòng)態(tài)更新,支持鼠標(biāo)交互等操作】

    【[Qt]基于QChartView開(kāi)發(fā)的圖表顯示控件,支持實(shí)時(shí)顯示,動(dòng)態(tài)更新,支持鼠標(biāo)交互等操作】

    十字線和顯示坐標(biāo)實(shí)現(xiàn) 在.h文件中定義十字線lineitem變量和坐標(biāo)textitem變量 在Cpp文件中初始化 然后定義鼠標(biāo)事件,在鼠標(biāo)進(jìn)入時(shí)顯示,移出時(shí)隱藏,移動(dòng)時(shí)顯示。 其他實(shí)現(xiàn)請(qǐng)參考具體代碼 ChartDrawer.h文件 ChartDrawer.cpp 文件 具體使用代碼如下 1、初始化類對(duì)象,并加入界面布局

    2023年04月23日
    瀏覽(30)
  • 在VS2022中開(kāi)發(fā)Qt程序添加控件后源代碼不識(shí)別不更新解決方法

    問(wèn)題表現(xiàn): 雙擊 *.ui 后,添加控件并保存,回到 VS2022 源代碼編輯器,輸入 ui.(點(diǎn))?或者 ui- 時(shí)無(wú)反應(yīng),并且源代碼中的類名有紅色波浪線。試過(guò)編譯 *.ui,然后 “重新掃描解決方案”,結(jié)果無(wú)效。 解決方法: 假設(shè)要進(jìn)行控件編輯的 ui 文件名為 Test.ui 1、在 VS2022 中打開(kāi) Test

    2024年02月16日
    瀏覽(90)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包