Qt 更新QGLWidget-事件或信号/插槽?

Qt 更新QGLWidget-事件或信号/插槽?,qt,opengl,signals-slots,Qt,Opengl,Signals Slots,我需要用非常精确的时间(毫秒级)闪现一些图像,为此我开发了QGLwidget的子类。图像在初始化时作为纹理加载。我正在使用QTimer实例更改正在显示的图像。计时器的超时信号连接到一个timeOutSlot,它执行一些文件I/O,然后调用updateGL() 虽然我知道事件处理程序用于外部事件,信号/插槽用于GUI内部通信,但我也可以将其实现为timeOutEvent处理程序 两者之间有什么性能差异吗?任何超过2-3毫秒的性能损失对我来说都是很重要的(硬件是平均的,比如带有nVidia 8600

我需要用非常精确的时间(毫秒级)闪现一些图像,为此我开发了QGLwidget的子类。图像在初始化时作为纹理加载。我正在使用QTimer实例更改正在显示的图像。计时器的超时信号连接到一个timeOutSlot,它执行一些文件I/O,然后调用updateGL()

虽然我知道事件处理程序用于外部事件,信号/插槽用于GUI内部通信,但我也可以将其实现为timeOutEvent处理程序


两者之间有什么性能差异吗?任何超过2-3毫秒的性能损失对我来说都是很重要的(硬件是平均的,比如带有nVidia 8600M GT图形卡的Intel core 2 duo T5700)

我之所以说是信号/插槽,是因为事件被添加到事件队列中,Qt通常会在事件队列中进行调用优化和重要性排序,而s/s会立即执行——尽管比直接调用慢。

信号和插槽比普通的旧函数调用慢10倍左右。但它们绝对不会慢到需要毫秒来处理。处理一个信号的时间约为0.001 ms()


您说您需要非常精确的计时,因此您知道显示刷新率如何影响图形吗?图像(通常)使用60 Hz刷新率绘制。图像之间的时间间隔为16.7毫秒,因此这是您可以获得的最大精度。

感谢您提供的计时信息。实际上,图像是通过DLP投影仪投影的。不幸的是,投影仪需要VGA输入,我受到VGA垂直刷新率的限制。(我更愿意直接编程DLP芯片,但出于一些奇怪的商业原因,TI销售单个DLP芯片的价格比拥有该芯片的投影仪高出几个数量级)。但只要我的图像显示时间是垂直刷新周期的倍数,我想我是安全的。