Qt中QGraphicsView三種座標系統詳解
在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
{
QFontMetrics metrics(font);
QRectF rect=metrics.boundingRect(str);//計算文字外接矩形
rect.translate(-rect.center());
rect.adjust(-4,0,+4,0);
return rect;
}
一開始我看到這段程式時總是不理解rect的座標是怎麼來的,它是用str計算外接矩形,但是外接矩形哪裡有座標呢?後來仔細想想在這程式之前在圖表應用程式中也有這樣的程式碼,書上是這樣說的:"由字型規格函式返回的外接矩形總是把(0,0)作為其左上角".現在理解這句話的意思為:rect的座標是項座標,它把項的中心作為其左上角的頂點(好像除了這種方法也無其它方法給它座標了,這種方法想想也很合理,不論外接矩形和項的尺寸有多大總是將外接矩形的左上角放在項的中間).
void Annotation::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
if(option->levelOfDetail<=threshold)
return;
painter->setFont(font);
QRectF rect=boundingRect();
int alpha=int(30*std::log(option->levelOfDetail));
if(alpha>=32){
qDebug()<<"\ndraw white rect";
} 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了相關文章
- OpenGL 座標系統詳解
- QT學習筆記(三)——QT中的座標系統及視窗位置,大小配置QT筆記
- Qt - 座標系及轉換QT
- MoseEvent 中的幾種座標系
- SVG 座標系統SVG
- Threejs的三維座標系JS
- Qt開發技術:圖形檢視框架(二)場景QGraphicsScene、QGraphicsItem與QGraphicsView詳解QT框架CSSView
- 座標系
- 【Unity3D的四種座標系】Unity3D
- 詳解 Java 中的三種代理模式Java模式
- OpenGL入門第三課--矩陣變換與座標系統矩陣
- View 體系詳解:座標系、滑動、手勢和事件分發機制View事件
- GIS中座標系的基本概念
- 座標系的生成
- 形象化理解笛卡爾座標系和極座標系
- canvas 座標系原點Canvas
- canvas座標系原點Canvas
- Android 三種動畫詳解Android動畫
- 地心地固座標系(ECEF)與站心座標系(ENU)的轉換
- 三維空間座標系變換-旋轉矩陣矩陣
- Python中求絕對值的三種方法詳解!Python
- 物體物件在螢幕中的座標及滑鼠座標物件
- CAD夢想畫圖如何自定義座標系統
- 招聘—軟體系統架構師,座標北京知春路架構
- Qt 求圓和橢圓上任意角度點的座標QT
- Qt隱藏系統標題欄,使用自定義標題欄QT
- 【matplotlib 實戰】--平行座標系
- android自定義View——座標系AndroidView
- Android中取消系統標題欄的幾種方式Android
- 機器人工具座標系標定原理機器人
- C++(Qt)-GIS開發-QGraphicsView顯示瓦片地圖簡單示例C++QTView地圖
- 將座標系統儲存為一個檔案.prj
- Android 校正系統時間的三種解決方案Android
- Shader 中的座標計算
- 什麼是快取系統三座大山快取
- Qt/C++地址轉座標/座標轉地址/逆地址解析/支援百度高德騰訊和天地圖QTC++地圖
- C++ opencv的圓轉矩形,極座標轉笛卡爾座標系C++OpenCV
- 如何在 Matlab 中繪製帶箭頭的座標系Matlab
- WebGL座標系的小祕密Web