gpt4 book ai didi

qt - 用于图形的 QGLWidget 和用于 GUI 的 QT

转载 作者:行者123 更新时间:2023-12-04 12:45:58 27 4
gpt4 key购买 nike

我正在尝试实现自定义 OpenGL 场景(包装在 QGLWidget 中),但仍然使用 QT 控件(例如滑动条和按钮)。我试图让我的主要小部件成为 QGLWidget,它有 QWidgets 作为 child 。子小部件似乎工作(当我单击下拉菜单时,它的选项出现),但小部件无法绘制(我看到一个白色方块)。我将我的 child 小部件的基类从 QWidget 更改为 QGLWidget,现在 QPainter 调用工作,但 QT GUI 的东西仍然没有显示......

有些人声称 QGLWidget 不能将 QWidgets 作为 child ......我不确定这一点,我也不愿意放弃。顺便说一句,我正在使用可视化库来绘制 OpenGL 场景,但它只是一个 OpenGL 包装器......

问题可能出在哪里的任何线索?此外,当我将子小部件添加到 GQLWidget 时,由于某种原因停止处理关键事件。

更新:
我尝试了小部件和布局的各种组合。似乎 QGLWidget 只是被绘制在任何东西之上。我什至尝试使用 raise() 来安排小部件的 Z 深度,但无济于事。 overlayGL() 是在 OpenGL 小部件顶部绘制的唯一方法吗?

更新 2
经过几个月的尝试,我发现这与 QT 有关。每当一个 QGLWidget 被绘制在另一个 QGLWidget 之上时,第一个的 background() 函数不会被调用。所以一个按钮在那里并且可以被点击,但它没有被绘制。我的解决方法是使用 QPainter 自己绘制所有内容 - 有效。我发现奇怪的是,必须使用 QPainter::startNativePainting() 才能使用它进行绘制。人们会期望他们会在 QPainter 中重载 start() 以在 QGLWidget 是绘画设备时调用 startNativePainting() ......

另一个(可能有用)事实是 QPainter 调用 CHANGE 更改 Opengl 上下文。因此,如果您有另一个与 QPainter 合作的工具(在我的例子中是可视化库),其中一个很可能会崩溃(在我的例子中是 VL,它检查在每一帧之前是否清除了上下文状态)。

最佳答案

有一个渲染的实验室示例 Qt widgets using opengl它有点旧,我还没有尝试过使用 4.8 中改进的 qglwidget

在全屏 QGLwidget 的顶部绘制也存在问题 - 这应该是 NVidia 的 openGL 驱动程序中的一个错误。好像没有解决
https://bugreports.qt-project.org/browse/QTBUG-7556

关于qt - 用于图形的 QGLWidget 和用于 GUI 的 QT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8675065/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com