QGraphicsView提供一個顯示QGraphicsScene內容的窗口,該窗口可以滾動,可以在構造時候把場景對象作爲參數,或者之後使用setScene()來設置view的場景,然後調用了show()函數後,view就可以默認的在場景的中心,顯示item,例如
QGraphicsScene scene;
scene.addText("Hello, world!");
QGraphicsView view(&scene);
view.show();
可以使用鼓動調來調節查看場景的位置,或者調用centerOn(),視圖會把傳進去的點參數作爲中心
通過調用render()視圖會顯示場景scene,默認的,items使用QPainter來繪製到視口上,使用默認的繪圖設置,改變繪製item時候視圖傳遞的QPainter性質,可以調用setRenderHints()。
默認的,視圖view提供給視口一個普通的QWidget,可以調用viewPort()來或得視口,也可以調用setViewport()來替換掉視口widget,使用OpenGL來作爲視口,可以簡單的setViewport(QGLWidget),由view對視口進行負責管理
視圖view可以轉換,使用QTransform或者直接調用rotate(), scale(), translate() or shear().
我們可以用鼠標或者鍵盤來和場景中的item進行交互,QGraphicsView把鼠標和鍵盤事件傳遞給場景scene
視圖view提供轉換函數,例如mapToScene()和mapFromScene(),獲取items通過調用items()和itemAt(),這些函數用來在視圖座標和場景座標之間轉換點,線,矩形,多邊形,和路徑,在視圖座標中找到items.
1、void QGraphicsView::setScene ( QGraphicsScene * scene )
設置當前場景爲scene,如果場景已經被查看,這個函數什麼都不做
當一個場景被設置到一個view上後,信號QGraphicsScene::changed() 被髮射,自動綁定到這個view的updateScene() 槽,view的滾動條調整到適合場景scene的大小
2、CacheMode QGraphicsView::cacheMode () const
void QGraphicsView::setCacheMode ( CacheMode mode )
這個屬性控制view的那一部分現在在緩存中,QGraphicsView可以預存一些內容在QPixmap中,然後被繪製到viewpoint上,這樣做的目的是加速整體區域重繪的速度,例如,質地,傾斜度,和最初的混合背景可能重繪很緩慢,尤其是在一個變形的view中, CacheBackground標誌使能view的背景緩存,例如
QGraphicsView view;
view.setBackgroundBrush(QImage(":/images/backgroundtile.png"));
view.setCacheMode(QGraphicsView::CacheBackground);
每次view轉換後cache就無效了,然而,當滾動區域時候,只有部分無效
默認的,沒有使用cache
3、viewportUpdateMode : ViewportUpdateMode
void setViewportUpdateMode ( ViewportUpdateMode mode )
這個屬性控制着viewport應該如何刷新他的內容
QGraphicsView 使用這個屬性來決定當場景改變或者暴露時候如何刷新場景的區域,通常不需要修改這個屬性,但是在有些情況下做這個工作可以改進繪圖性能,詳細特定的可以參看ViewportUpdateMode 文檔
默認的值是 MinimalViewportUpdate,當內容改變時候QGraphicsView將會刷新儘可能小的視圖點。
4、ViewportAnchor transformationAnchor () const
void setTransformationAnchor ( ViewportAnchor anchor )
ViewportAnchor這個屬性控制着當轉換時候view應該如何擺放場景的位置
QGraphicsView使用這個屬性來決定當轉換矩陣修改和座標系統修改時候如何擺放場景的在viewport中的位置,默認的是 AnchorViewCenter,這樣使場景點在變換時候保持在view中心點不變(例如:當旋轉時候,場景將會圍繞着view中心點來旋轉)
只有場景中的一部分可見時候這個屬性才顯而易見的。例如:當view中有滾動條時候,否則整個場景都在view中,場景將會使用QGraphicsView::aligenment來擺放它的位置
5、void QGraphicsView::scale ( qreal sx, qreal sy )
縮放當前的view,比例是sx,sy
6、void QGraphicsView::resetCachedContent ()
重新設置緩衝區的內容,調用這個函數將會清空緩衝區的內容,如果當前緩衝模式是CacheNone,那這個函數什麼都不做,當backgroundBrush 或者QGraphicsScene::backgroundBrush改變時候,這個函數會自動調用,如果你重寫了QGraphicsScene::drawBackground() 或者 QGraphicsView::drawBackground()調用這個函數,來觸發重畫繪製一個背景。
7、void QGraphicsView::render ( QPainter * painter, const QRectF & target = QRectF(), const QRect & source = QRect(), Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio )
將視圖中source rect的內容打印到target rect上,使用painter,這將在一個繪圖設備上完成,例如QImage,或者QPrinter.
8/、當場景改變時時候,場景發射信號QGraphicsScene::sceneRectChanged().
由視圖槽函數void QGraphicsView::updateSceneRect ( const QRectF & rect ) [slot]接受,
Rect是最新的場景區域,如果view已經有了一個明確的場景scene的矩形,這個函數不起作用
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/xie376450483/archive/2010/11/14/6008810.aspx