问题
Windows 有一个系统设置会导致鼠标指针自动跳转(移动)到新的焦点元素,例如弹出对话框的默认按钮。虽然优点是提高了速度并减少了鼠标移动,但它也有一个缺点:
如果这发生在用户单击另一个元素之前,用户将无法及时中止他/她的操作,并且将立即接受对话框默认按钮,因为焦点已被系统移动。通常这可能需要繁琐的工作来追溯到目前为止的步骤(想想一个文件选择器对话框,它忘记了您之前输入的很长的路径),但它也可能意味着触发一个不可逆的过程(例如文件删除)。
目标
本质上,我想在一小段时间内禁用对话框的输入,足以防止无意中单击鼠标或按下键盘按钮。
问题
归结为一个 C++ 问题,即如何从继承类访问基类的对象(GUI 小部件),即
- 禁用 QMessageBox 的按钮小部件
- 启动单次 QTimer 并将其连接到一个插槽
- 启用以前禁用的小部件
(作为替代方案,我可能可以重新实现在特定时间内抑制所有输入的输入事件处理程序,但是尽管我打算保持该时间非常短(例如 100 毫秒),但用户不会使用该方法通知禁用输入.)
从 QDialogBox 派生的一个简单类可以在http://www.qtforum.org/article/24342/messagebox-auto-close-mouse-event-close.html找到。