QGraphicItem實現中心旋轉

2021-07-14 20:10:19 字數 1198 閱讀 4397

qgraphicitem實現中心旋轉

一、解決思路

1)確定旋轉中心座標:centerpos;

2)在mousepressevent(qmouseevent *e)中e->pos()獲得按下時的座標:presspos

3)mousemoveevent(qmouseevent *e)中e->pos()獲得當前座標:movepos;

4)centerpos、presspos、movepos三點確定旋轉角度:rotateangle;

5)qtransform transform; 

transform.rotate(rotateangle, qt::zaix); //沿著z軸旋轉角度rotateangle

this->settransform(transform);

6)done。

二、示意圖

獲取旋轉中心:

qpointf centerpos=item->boundingrect().center();

設定旋轉中心:

void qgraphicsitem::settransformoriginpoint(qreal x, qreal y)

設定旋轉角度:

void qgraphicsitem::setrotation(qreal angle)

三、難點

1.角度確定

採用餘弦定理:

2.判斷是順時針還是逆時針

思路:在平面上作向量oa、ob,oa叉乘ob為正,則是逆時針,為負為順時針.

過程:記向量oa為(dx1, dy1) = (x2-x1, y2-y1)向量ob為(dx2, dy2) = (x3-x1, y3-y1)叉積為:

即:dx1 * dy2 - dy1 * dx2 

3.滑鼠根據在item的位置進行形狀的改變

思路:通過判斷滑鼠在item的位置進行形狀的替換,可設定四種形狀:

rotationleftup,rotationleftdown,rotationrightup,rotationrightdown.旋轉的滑鼠樣式可以自定義。

qcursor *mycursor= newe qcursor(qpixmap(":/image/rotation.png"));

setcursor(*mycursor);

QGraphicItem實現中心旋轉

qgraphicitem實現中心旋轉 一 解決思路 1 確定旋轉中心座標 centerpos 2 在mousepressevent qmouseevent e 中e pos 獲得按下時的座標 presspos 3 mousemoveevent qmouseevent e 中e pos 獲得當前座標 ...

QGraphicItem, 拖拽視窗大小例子

參考 qt 4.7.1 demos boxes 所寫。例子表現 如圖。hover到紅色拖拽區域,滑鼠樣式改變。重點語句已經做重點標記。h class graph public qgraphicsitem cpp const qreal g cresizepos graph graph int x,i...

爬蟲中實現翻頁(佇列實現)

在爬取列表頁時,通常我們需要翻頁,最簡單的翻頁實現是遞迴呼叫,偽 如下 def crawl list url next url crawl url process html data extract next url if next url is not none crawl list next u...