- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们有一个基于 QWidget 的应用程序,它以前使用 QWindow 进行 OpenGL 渲染。为了在我们的应用程序中适应该窗口,我们必须使用
QWidget QWidget::createWindowContainer(QWindow);
以前我们只使用外部 Qt OpenGL 库进行渲染。
我们希望从使用 QWindow 切换到某种 QWidget 以与触摸手势兼容,并且通常与我们的应用程序的其余部分具有更好的整体兼容性。最新推荐的 OpenGL 兼容 QWidget 似乎是 QOpenGLWidget,所以我们正在尝试使用它。
glContext
是我们自己管理的 OpenGLContext。
现在的问题是QOpenGLWidget不是QSurface,所以我不能调用
glContext->makeCurrent(this);
使上下文在我的自定义 QOpenGLWidget 上成为当前上下文,就像我们以前使用自定义 QWindow 和我们自己的 OpenGLContext 一样。
如果我尝试使用 QOpenGLWidget::makeCurrent();
那么这会使用错误的上下文并尝试使用一些神奇的 QT 处理的上下文或我不理解的东西。
结果是在我们尝试调用时创建了我们的 OpenGLContext
glFunctions = glContext->versionFunctions<QOpenGLFunctions_3_3_Core>();
if(!glFunctions->initializeOpenGLFunctions())
printf("Could not initialize OpenGL functions.");
它总是无法初始化 OpenGL 函数。
我一直在阅读我能找到的关于这个主题的所有其他资源,并遇到了这个类似的旧 Stack Overflow 问题: QOpenGLWidget with shared OpenGL context?
该问题的答案并没有解决我的问题,因为我们使用的是 QApplication,而不是 QGuiApplication,因为这是一个基于 QWidget 的应用程序。QGuiApplicationPrivate::init()
永远不会被调用并且 QOpenGLContext::globalShareContext()
返回一个空指针,因为它没有被初始化。
不幸的是,我等不及要调用 QOpenGLWidget::initializeGL()
来初始化 QT 管理的 OpenGLContext
,因为我们已经拥有各种类的大量 OpenGL 资源 < em>尝试在此之前进行初始化。
有没有人遇到过同样的问题?
有什么建议吗?
最佳答案
我在这里做一些猜测工作。
可能您的 OpenGL 默认为 ANGLE。您之前的应用程序 OpenGL 调用是平台特定的 OpenGL API。
尝试将以下属性设置为您的 QApplication
对象。
appObject->setAttribute(Qt::AA_UseDesktopOpenGL, true);
然后尝试调用
QOpenGLWidget::makeCurrent();
如果仍然无法正常工作,请为桌面 OpenGL 配置您的 QT 库。
configure -opengl desktop
以下链接为您提供了有关 Qt OpenGL 方法的一些信息。 http://doc.qt.io/qt-5/windows-requirements.html
发表评论,如果这对您没有帮助,将删除答案。
关于c++ - QOpenGLWidget 与 QApplication?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47058621/
我想念任何Qt如果我替换 QApplication::exec() 的功能使用标准的 Windows 消息循环实现?这应该澄清我的意思: 运行事件处理的常用“Qt”方式: int main(int a
何时在 Windows 上调用虚函数 QApplication::saveState 和 QApplication::commitData?它们是否被调用,或者 session 管理只是 UNIX 的
有两个qApplications A & B,它们可以在各自的主窗口中分别执行。 我想实现以下目标: 1) //Open Application B. //Inside App B's code
我正在尝试运行一个简单的 hello world 示例,并且已经需要一些时间来弄清楚要使用的内容现在我验证了包含路径,QApplication 实际上应该在那里,但它抛出了上述错误。为了清楚起见,我的
当我首先运行 python-pyside2 项目服务器时,它运行良好。 而且该站点也运行良好,但是如果我按 F5 btn 在浏览器中刷新。 站点显示错误页面 Runtime at/ import sy
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我正在将 Qt 桌面应用程序移植到 Linux(Ubuntu 19.10、64 位桌面、Qt 5.12.5、gcc 版本 9.2.1),并且在 QApplication 完成后发现一些意外的线程仍然处
这里引用 Qt 文档: For any GUI application using Qt, there is precisely one QApplication object 很明显。但我不知道为什
这里引用 Qt 文档: For any GUI application using Qt, there is precisely one QApplication object 很明显。但我不知道为什
我正在尝试将修改后的 qt 程序作为库运行。我需要它而不是阻止主执行。 所以我想做的是运行 QApplication 并开始执行主应用程序。我该如何实现? 我的第一个想法是在一个单独的线程中运行它。
我需要在单击按钮时重新启动我的应用程序,但我遇到了一些问题。我尝试了两种方法: 已尝试 this suggestion它确实重新启动了应用程序,但是我得到了每个小部件的 Gtk_IS_INVISIBL
我试图在不同的线程中创建 QApplication,但发现了 2 个主要问题: 1- 我无法与 GUI 交互 2- 一些警告: 警告:QApplication 不是在 main() 线程中创建的。 Q
是否可以在退出前一个实例后创建和使用新的 QApplication 实例? 最佳答案 是的,您可以在销毁前一个实例后创建一个新的 QApplication。我在 Windows 中使用 PyQt4 验
我是 PyQt4(和 QT)的新手,我遇到了一个问题, 我已经对 QApplication 进行了子类化(以具有对应用程序真正全局的全局数据和函数): class App(QApplication):
我正在 3Dsmax 2015 上做一些简单的 PySide。 这是我的错误: python.ExecuteFile "C:\Program Files\Autodesk\3ds Max 2015\s
我有一个带有单个对话框窗口的 Qt 应用程序。主要看起来像这样: QApplication a(argc, argv); MyObject * myMobject = new QObject(&a);
我有一个带有通知区域图标的应用程序,因此主窗口可能会忽略关闭事件。我正在尝试在应用程序退出时保存首选项和历史记录。我还想在应用程序运行时处理注销。虽然该应用程序是跨平台的,但它在 GNU/Linux
QApplication::QApplication ( int & argc, char ** argv ) Initializes the window system and constructs
我应该在哪里使用 except 块来记录 QApplication 的异常? 这似乎不起作用: app = QtGui.QApplication(sys.argv) MainWindow = Main
在基本的 C++ Qt Widgets 应用程序中,在堆栈上创建一个 QApplication 或直接在 main 函数中对其进行堆分配是可行的,但是在堆上调用一个函数-分配一个 QApplicati
我是一名优秀的程序员,十分优秀!