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

C++ QgraphicsScene類案例詳解

 更新時(shí)間:2021年08月23日 14:59:18   作者:changbaolong  
這篇文章主要介紹了C++ QgraphicsScene類案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

概述

QgraphicsScene類為管理大量的2D圖形item提供了一個(gè)管理界面,做為item的容器,它配合使用QgraphicsView使用來觀察items,例如線,矩形,文本或者自定義的items,

QgraphicsScene提供了方便的函數(shù)來讓你高效的找到items的位置,或者決定在scene上哪個(gè)item可以看到,配合QgraphicsView窗口,你可以讓可見scene,或者縮放場(chǎng)景來可見一部分

例如:

QGraphicsScene scene;
scene.addText("Hello, world!");
QGraphicsView view(&scene);
view.show();

注意:QgraphicsScene場(chǎng)景沒有自己可見的外觀,他只管理items,需要?jiǎng)?chuàng)建一個(gè)QgraphicsView Widget來讓場(chǎng)景可見。

添加items到場(chǎng)景中,首先你要構(gòu)造一個(gè)QGraphicsScene對(duì)象,然后,你有兩個(gè)選擇: 一是通過addItem函數(shù),一是通過調(diào)用方便的函數(shù) addEllipse(), addLine(), addPath(), addPixmap(), addPolygon(), addRect(), or addText(),   將會(huì)返回一個(gè)新添加的item的指針,添加到場(chǎng)景中的item大小和item本地坐標(biāo)系統(tǒng)有關(guān),初始化位置在場(chǎng)景中的(0,0)

當(dāng)場(chǎng)景改變時(shí)候,例如轉(zhuǎn)換item或者刪除item時(shí)候,場(chǎng)景QgrapbhicsScene會(huì)發(fā)射change()信號(hào),刪除item,可以調(diào)用removeItem()

QgrapbhicsScene使用下標(biāo)來高效的管理item的位置,默認(rèn)的使用BSP樹,適用于一個(gè)大型的場(chǎng)景,其中的item都是靜止不變的,可以選擇調(diào)用setItemIndexMethod().來禁用下標(biāo),可是查看itemIndexMethod來獲取更多的信息

場(chǎng)景的邊界可以使用setSceneRect()來設(shè)置,item可以放置在場(chǎng)景中任何位置,場(chǎng)景默認(rèn)的大小是不受限制的,場(chǎng)景的矩形只用來做內(nèi)部的簿記,管理場(chǎng)景中的item下標(biāo),如果場(chǎng)景矩形沒有設(shè)置,QgrapbhicsScene將會(huì)使用所有item圖元的邊界,使用函數(shù)itemsBoundingRect()返回

QgrapbhicsScene一個(gè)巨大的功能是他可以高效的找到items的位置,即便是場(chǎng)景中有上百萬個(gè)item,items()函數(shù)可以在數(shù)微秒內(nèi)找到item的位置,items()有一些重載函數(shù)(省略)

ItemAt()函數(shù)可以根據(jù)提供的位置返回所在位置處的最上層的item

QgrapbhicsScene包含了場(chǎng)景的選擇信息,選擇items,可以使用setSelectionArea(),清除當(dāng)前選擇可以使用clearSelection(),調(diào)用selectedItems()來獲取已經(jīng)選擇的items

事件處理和傳播

QgrapbhicsScene另外一個(gè)責(zé)任是傳播從QgraphicsView來的事件,發(fā)送事件給場(chǎng)景scene,可以繼承QEvent構(gòu)建一個(gè)事件,然后使用QApplication::sendEvent()來傳遞,event()函數(shù)負(fù)責(zé)分發(fā)給各個(gè)獨(dú)立的items,一些普通的事件可以使用方便的事件處理函數(shù),例如keyPressEvent()和mousePressEvent()

鍵盤事件發(fā)送給當(dāng)前選擇的item,設(shè)置選擇的item,可調(diào)用setFocusItem(),將要選擇的item作為參數(shù)傳遞進(jìn)去,或者item自己調(diào)用函數(shù)QgraphicsItem::setFocus(),調(diào)用focusItem()來獲取當(dāng)前的選擇的item,為了窗口的兼容性,場(chǎng)景也獲取它自己的獲取光標(biāo)的信息,默認(rèn)的,場(chǎng)景沒有焦點(diǎn),鍵盤事件也被忽略,如果函數(shù)setFocus()調(diào)用了,或者場(chǎng)景中一個(gè)item圖元獲得了焦點(diǎn),場(chǎng)景也自動(dòng)的獲得了焦點(diǎn),然后場(chǎng)景的hasFocus()函數(shù)返回真,鍵盤事件將會(huì)發(fā)送給選擇的那個(gè)item,當(dāng)場(chǎng)景丟失了focus,但是其中的item獲得了焦點(diǎn),那么這個(gè)場(chǎng)景也將獲得這個(gè)item的焦點(diǎn)信息,如果場(chǎng)景要重新獲取焦點(diǎn),它將會(huì)把上次獲得焦點(diǎn)的item重新獲得item

對(duì)于鼠標(biāo)移動(dòng)效果,QgrapbhicsScene傳遞鼠標(biāo)懸浮事件,如果其中的item設(shè)置了接受QGraphicsItem::acceptHoverEvents()事件(默認(rèn)是忽略該事件的),它將會(huì)收到GraphicsSceneHoverEnter事件,GraphicsSceneHoverMove,GraphicsSceneHoverLeave事件

所有的鼠標(biāo)事件都傳送給當(dāng)前鼠標(biāo)拖動(dòng)的那個(gè)item,當(dāng)然也要item設(shè)置接受鼠標(biāo)事件,看QGraphicsItem::acceptedMouseButtons(),

可以調(diào)用QGraphicsItem * QGraphicsScene::mouseGrabberItem () const來查看當(dāng)前選擇的item,該函數(shù)會(huì)返回選擇的item的指針。

1、QGraphicsScene::setItemIndexMethod ( ItemIndexMethod method )

用來設(shè)置場(chǎng)景中item的下標(biāo)的方法,QGraphicsScene對(duì)場(chǎng)景應(yīng)用一個(gè)index算法,來加速查詢item,例如items()和itemAt(),下標(biāo)對(duì)于靜態(tài)的場(chǎng)景很有用,對(duì)動(dòng)態(tài)的場(chǎng)景,或者場(chǎng)景中有很多動(dòng)畫項(xiàng)目(animated items),使用下標(biāo)來尋找item就不行了

一般情況下,默認(rèn)的下標(biāo)使用BSP樹就能很好的工作,如果你的場(chǎng)景中使用了很多動(dòng)畫,可以禁用下標(biāo)通過調(diào)用setItemIndexMethod(QGraphicsScene::NoIndexNoIndex)

2、QGraphicsScene::setSceneRect(const QRectF & rect)

用來設(shè)置場(chǎng)景的矩形區(qū)域,限定場(chǎng)景的邊界

這個(gè)矩形限定了場(chǎng)景的范圍,它首先使用QGraphicsView來確定試圖的可卷動(dòng)區(qū)域,使用QGraphicsScene來管理item下標(biāo)

如果不設(shè)定矩形區(qū)域,或者設(shè)置一個(gè)空的矩形,QRect QGraphicsScene::FsceneRect() const會(huì)返回最大的邊界,場(chǎng)景中所有的item都會(huì)被創(chuàng)建。

到此這篇關(guān)于C++ QgraphicsScene類案例詳解的文章就介紹到這了,更多相關(guān)C++ QgraphicsScene類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解C/C++混合編程

    深入理解C/C++混合編程

    本篇文章是對(duì)C/C++混合編程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++實(shí)現(xiàn)utf8字符串和gbk字符串互轉(zhuǎn)

    C++實(shí)現(xiàn)utf8字符串和gbk字符串互轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)utf8字符串和gbk字符串轉(zhuǎn)換的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • C++類中的常數(shù)據(jù)成員與靜態(tài)數(shù)據(jù)成員之間的區(qū)別

    C++類中的常數(shù)據(jù)成員與靜態(tài)數(shù)據(jù)成員之間的區(qū)別

    常數(shù)據(jù)成員是指在類中定義的不能修改其值的一些數(shù)據(jù)成員,類似于我們以前學(xué)過的常變量,雖然是變量,也有自己的地址,但是一經(jīng)賦初值,便不能再被修改
    2013-10-10
  • C語言復(fù)雜鏈表的復(fù)制實(shí)例詳解

    C語言復(fù)雜鏈表的復(fù)制實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了C語言復(fù)雜鏈表的復(fù)制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C/C++中的static關(guān)鍵字詳解

    C/C++中的static關(guān)鍵字詳解

    這篇文章主要為大家詳細(xì)介紹了 C/C++中的static關(guān)鍵字,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++超詳細(xì)講解友元與內(nèi)部類

    C++超詳細(xì)講解友元與內(nèi)部類

    朋友們好,這篇播客我們繼續(xù)C++的初階學(xué)習(xí),現(xiàn)在對(duì)我們對(duì)C++的友元,內(nèi)部類知識(shí)點(diǎn)做出總結(jié),整理出來一篇博客供我們一起復(fù)習(xí)和學(xué)習(xí),如果文章中有理解不當(dāng)?shù)牡胤?還希望朋友們?cè)谠u(píng)論區(qū)指出,我們相互學(xué)習(xí),共同進(jìn)步
    2022-06-06
  • C++實(shí)現(xiàn)職工管理系統(tǒng)

    C++實(shí)現(xiàn)職工管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)職工管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Opencv EigenFace人臉識(shí)別算法詳解

    Opencv EigenFace人臉識(shí)別算法詳解

    這篇文章主要為大家詳細(xì)介紹了Opencv EigenFace人臉識(shí)別算法的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 詳解C++設(shè)計(jì)模式編程中對(duì)訪問者模式的運(yùn)用

    詳解C++設(shè)計(jì)模式編程中對(duì)訪問者模式的運(yùn)用

    這篇文章主要介紹了C++設(shè)計(jì)模式編程中對(duì)訪問者模式的運(yùn)用,訪問者模式在不破壞類的前提下為類提供增加新的新操作,需要的朋友可以參考下
    2016-03-03
  • qt5之QFile讀寫文件功能詳解

    qt5之QFile讀寫文件功能詳解

    這篇文章主要為大家詳細(xì)介紹了qt5之QFile讀寫文件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評(píng)論

绩溪县| 都昌县| 崇信县| 报价| 仁寿县| 安图县| 都匀市| 舞阳县| 弥渡县| 德令哈市| 洛川县| 吴江市| 漳浦县| 海兴县| 莲花县| 高安市| 长乐市| 高清| 万全县| 镇赉县| 交城县| 宜兴市| 岢岚县| 青铜峡市| 环江| 托克逊县| 磴口县| 海阳市| 伊宁县| 汉川市| 定兴县| 新乡市| 南皮县| 金溪县| 兰溪市| 合江县| 左贡县| 任丘市| 疏勒县| 松阳县| 乐昌市|