0

我想在 QT 中围绕其 Y 轴(或任何轴)旋转一个小部件,其方式与此处显示的方式完全相同:

围绕 Y 轴在 3D 空间中的图像旋转

我已经搜索过,但我得到的所有二维变换,如顺时针或逆时针旋转

我真的想要一些非常简单的东西,因为我会在整个项目中这样做一次。

4

3 回答 3

1

首先,由于绘画引擎的操作方式(它完全是 2D)和布局管理器的工作方式,普通的 Qt 小部件无法做到这一点,因此任何解决方案都不是微不足道的。

最简单的方法是将小部件放入 a QGraphicsScene/Viewas aQGraphicsProxyWidget中,并使用该setTransform(const QTransform&, bool)方法应用转换矩阵。

但是,由于引擎仍然是 2D,您必须创建一个 3D 转换矩阵来描述您想要的操作,然后使用投影转换为 2D 矩阵。这并不简单,但是您可以“伪造”效果,就像您使用静态方法链接到的效果一样squareToQuad(const QPolygonF&, QTransform&)- 当用户“旋转”小部件时,一个垂直边缘变得更小并向四边形中心移动,而相反的边缘变得更大并向四边形中心移动。

于 2013-01-27T10:08:22.113 回答
0

最容易制作和理解的可能是将小部件绘制到 QPixmap。然后子类 QWidget 将绘制这个 QPixmap 转换以匹配 3D 旋转,或“假”旋转。由于这幅画整齐地位于您的自定义小部件中的单个paintEvent() 中,因此很容易从假版本开始(例如,没有透视图),然后如果有时间和需要,可以返回并改进它。

例如,使用 OpenGL 进行绘画会很容易,例如基于Qt 的 openGL 示例中的“纹理”示例。

于 2013-01-27T10:18:21.417 回答
0

如果您真的想在 Qt 项目中以能够与其他用户界面小部件良好集成的方式完成此操作,我建议您查看 Qt Quick (Qt 4.7 +) 或 Qt Quick 2.0 (Qt 5.0 +)。它们旨在帮助促进创建更动态的界面。他们使用 QML(描述小部件功能的类似 css 的标记语言)和熟悉的更高级别的 C++ 包装器,可以像任何其他 Qt 小部件一样访问。Qt Quick 2.0 尤其酷,能够相对轻松地绘制酷炫的粒子系统效果。

于 2013-02-28T02:38:01.523 回答