簡體   English   中英

在3D空間中的QT中圍繞其Y軸旋轉小部件

[英]Rotate widget around its Y axis In QT in 3d space

我想在QT中圍繞其Y軸(或任何軸)旋轉窗口小部件,其方式與此處顯示的完全相同:

圍繞Y軸在3D空間中旋轉圖像

我已經搜索過,但是所有我得到的2d轉換都順時針或逆時針旋轉

我真的想要一個非常簡單的東西,因為我將在整個項目中執行一次。

首先,由於繪畫引擎的運行方式(完全為2D)以及布局管理器的工作方式,普通的Qt小部件無法做到這一點,因此任何解決方案都是不平凡的。

做到這一點最簡單的方法,就是把這個構件到一個QGraphicsScene/View作為QGraphicsProxyWidget ,並使用setTransform(const QTransform&, bool)方法來應用轉換矩陣。

但是,由於引擎仍然是2D,因此您必須創建一個3D變換矩陣來描述所需的操作,然后使用投影將其轉換為2D矩陣。 這並不簡單,但是您可以使用靜態方法squareToQuad(const QPolygonF&, QTransform&)鏈接的效果squareToQuad(const QPolygonF&, QTransform&)因為用戶“旋轉”小部件時,一個垂直邊緣變小並朝四邊形中心移動,相反的邊緣變大並移向四邊形中心。

最容易制作和理解的是將小部件繪制為QPixmap 然后,QWidget子類將繪制的QPixmap轉換為匹配3D旋轉或“假”旋轉。 由於這幅畫整齊地放在自定義窗口小部件的單個paintEvent()中,因此很容易從偽造的版本開始(例如,無透視圖),然后回到它並在有時間和需求的情況下對其進行改進。

例如,使用OpenGL進行繪畫非常容易,例如基於Qt的openGL示例中的 “紋理”示例。

如果您真的想以與其他用戶界面小部件很好地集成的方式在Qt項目中完成此操作,則建議您查看Qt Quick(Qt 4.7 +)或Q​​t Quick 2.0(Qt 5.0+)。 它們的設計旨在幫助促進創建更多動態界面。 他們使用QML(描述小部件功能的類似於CSS的標記語言)以及熟悉的高級C ++包裝器,該包裝器可以像其他任何Qt小部件一樣進行訪問。 Qt Quick 2.0特別酷,能夠相對輕松地繪制炫酷的粒子系統效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM