我想在QT中围绕其Y轴(或任何轴)旋转小部件,与在此处显示的方式完全相同:
Image rotation in 3D space around Y axis
我已经搜索了所有我得到的2d变换,如顺时针或逆时针旋转
我真的想要一些非常简单的东西,因为我会在整个项目中做一次。
答案 0 :(得分:1)
首先,正常的Qt小部件无法做到这一点,因为绘图引擎的运行方式(它完全是2D),以及布局管理器的工作方式,所以任何解决方案都是非平凡的。
最简单的方法是将小部件放入QGraphicsScene/View
作为QGraphicsProxyWidget
,并使用setTransform(const QTransform&, bool)
方法应用转换矩阵。
然而,由于引擎仍然是2D,您必须创建描述所需操作的3D变换矩阵,然后使用投影转换为2D矩阵。这并不简单,但你可以通过使用静态方法squareToQuad(const QPolygonF&, QTransform&)
来“伪造”你所链接的效果 - 当用户'旋转'小部件时,一个垂直边缘变小并朝四边形中心移动,同时相对的边缘变得更大,并向四边形中心移动。
答案 1 :(得分:0)
最容易制作和理解的可能是,paint the widget to a QPixmap。然后子类QWidget wo将此QPixmap转换为匹配3D旋转或“假”旋转。由于这幅画整齐地放在你的自定义小部件中的单个paintEvent()中,因此很容易从假版本开始(比如没有透视),然后回到它并在有时间和需要的情况下改进它。
例如,使用OpenGL进行绘画非常容易,例如基于"Textures"中的openGL examples of Qt示例。
答案 2 :(得分:0)
如果您真的想在Qt项目中以与其他用户界面小部件很好地集成的方式完成此任务,我建议您查看Qt Quick(Qt 4.7 +)或Qt Quick 2.0(Qt 5.0 +)。它们旨在帮助促进创建更多的动态界面。他们使用QML(描述小部件功能的类似css的标记语言)与熟悉的更高级别的C ++包装器相结合,可以像任何其他Qt小部件一样进行访问。 Qt Quick 2.0特别酷,能够相对轻松地绘制出酷炫的粒子系统效果。