2

我有一个 QOGLWidget 小部件,它构建在另一个窗口中,由 QMainwindow 中的按钮激活。我正在尝试将图像的表面从小部件发送到主窗口的 QOGLWidget,它崩溃并给出第一次机会异常访问冲突的问题。

4

1 回答 1

1

在这种情况下,我认为可能会发生三件事:

Qt::自动连接

您的帧生成器和 GUI(SimulatorWindow + GLSimulatorWidget)之间的连接由Qt::AutoConnection连接,当它们驻留在单独的线程上时最终变成Qt::DirectConnection 。指定Qt::QueuedConnection的连接来解决这个问题(如果它们确实在不同的线程上)。

QPixmap 诉 QImage

您可以在 GUI 线程之外处理QPixmap。这通常会打印出警告,但可能仍然有效。通常,如果您不在 GUI 线程中处理图像,然后将其发送到 GUI 线程,则需要使用QPixmap以外的东西,例如QImage

堆栈上的初始化

您的框架对象在到达您的 GUI 时可能已经超出范围。例如,如果您构建一个框架,并将其存储在堆栈的本地范围中,然后将其传递给处理程序或容器......

...然后,当您离开本地范围以在 GUI 中表示对象时,您的框架对象将消失,并且您的处理程序/容器将保留一个错误的指针。

为了解决这个问题,初始化到堆上并坚持使用Qt Object Model。我也喜欢将我的容器放在堆上,作为它们所属类的成员变量。

总而言之:检查您的连接类型,如果您的帧生成器是否在 GUI 线程上,如果您在不是 GUI 的线程中,请使用 QImage 而不是 QPixmap,并确保您的指针没有超出范围。

于 2012-08-12T22:49:54.830 回答