我曾想过在 the paint 事件中使用QTime
和object,但我不确定这是否能实现我的目标。QElapsedTimer
QWidget
事实上,这是唯一的方法,也是你真正能做的。如果不求助于实时操作系统、自定义驱动程序或外部硬件,就无法做进一步的事情。
您可能不需要两者 -QElapsedTimer
测量自上次更新以来经过的时间就足够了。
请注意,当事件循环为空时,调用widget.update()
和paintEvent
执行之间的延迟低于一微秒,假设您的进程没有被抢占。
这是一些研究的反应时间实验。呈现视觉输入,用户通过键盘或鼠标对其做出响应。为了能够准确地找到反应时间,我需要知道刺激是什么时候出现在屏幕上的,什么时候按键是被按下的。
基本上只有一种方法可以在不求助于实时操作系统或自定义驱动程序的情况下正确地做这件事,而做错的方法有很多。那么,正确的方法是什么?
屏幕的一小部分区域需要随着视觉刺激的呈现同时改变颜色或亮度。您将光纤连接到屏幕上,并将其馈送到连接到外部事件计时器的接收器中。键盘中的触点闭合也馈送到相同的事件计时器。这使您可以精确地计时响应的延迟,而无需考虑操作系统延迟、线程抢占等。如果您愿意做更多的开发工作,事件计时器可以像Arduino一样便宜。
如果您重复显示刺激并且在刺激呈现之间需要一定的时间,您只需经常重复呈现并在数据中收集响应延迟和刺激到刺激的时间。然后,您可以丢弃超出所需容差的演示文稿。
这种方法与屏幕无关,您甚至可以在移动设备上使用它,只要它能够以某种方式与您的计时器硬件交互。定时器硬件当然可以联网,使接口变得容易。