Qt中QGraphicsView三種座標系統詳解

2021-06-28 20:59:29 字數 1383 閱讀 7202

在qgraphicsview中支援三種不同的座標系統---視口座標、場景座標、項座標

場景座標就是系統視窗(qgraphicsscene)的座標,它(0,0)作為它的左上角座標.

視口座標相當於場景座標的數學變換,如當乙個視窗座標為(0,0)至(100,100)那麼這個視窗就是實實在在的由100*100個畫素組成,此時把座標變換為(-50,50)(即場景座標(0,0))至(50,-50)(即場景座標為(100,100))那麼這個視口座標就是以(0,0)為中心了.當放大縮小item時可以改變視口座標的大小(如放大1倍)視口座標可以變為(0,0)至(50,50).

而項座標則為item本身的座標,它不隨場景座標、視口座標變化並且以(0,0)為中心.

在c++ gui qt程式設計(第二版) cityscape中有段這樣的程式:

qrectf annotation::boundingrect()const

一開始我看到這段程式時總是不理解rect的座標是怎麼來的,它是用str計算外接矩形,但是外接矩形**有座標呢?後來仔細想想在這程式之前在圖表應用程式中也有這樣的**,書上是這樣說的:"由字型規格函式返回的外接矩形總是把(0,0)作為其左上角".現在理解這句話的意思為:rect的座標是項座標,它把項的中心作為其左上角的頂點(好像除了這種方法也無其它方法給它座標了,這種方法想想也很合理,不論外接矩形和項的尺寸有多大總是將外接矩形的左上角放在項的中間).

void annotation::paint(qpainter *painter,

const qstyleoptiongraphicsitem *option,

qwidget *widget)

painter->fillrect(rect,qcolor(100,255,255,80));

painter->setpen(qt::white);

//建立陰影效果

painter->drawtext(rect.translated(+1,+1),str,

qtextoption(qt::aligncenter));

painter->setpen(qt::blue);

painter->drawtext(rect,str,qtextoption(qt::aligncenter));

}

在paint函式中painter直接用rect繪圖這是因為annotation的父類中setpos()設定了annotatio的場景座標.

void qpainter::​fillrect(const qrectf & rectangle, const qbrush & brush)
fillrect等函式形參座標為項座標,在函式內項座標與場景座標合成就能繪出指定位置的item了

Qt 筆記 Qt中的IO操作

qt中io操作的處理方式 qt通過統一的介面簡化了檔案與外部裝置的操作方式 qt中的檔案被看做一種特殊的外部裝置 qt中的檔案操作與外部裝置的操作相同 io操作中的關鍵函式介面 開啟裝置 bool open openmode mode 讀取資料 qbytearray read qint64 maxs...

Qt中socket程式設計

在linux下進行網路程式設計,我們可以使用linux提供的統一的套接字介面。但是這種方法牽涉到太多的結構體,比如ip位址,埠轉換等,不熟練的人往往容易犯這樣那樣的錯誤。qt中提供的socket完全使用了類的封裝機制,使使用者不需要接觸底層的各種結構體操作。而且它採用qt本身的signal slot...

QT中的執行緒

qt中的執行緒是不可以執行ui內容的,一般情況,執行邏輯運算就可以,但是,如果讓執行緒中用到ui,就需要用到 訊號和槽 的機制了 如果執行緒用到 訊號和槽 執行緒的定義就需要放到主介面定義的檔案中了 q object 否則編譯出錯 部分 如下 ifndef proc h define proc h ...