Qt鼠标事件

1、鼠标事件有哪些?默认如何触发?
查文档;查文档,注意mousemoveevent默认是鼠标按下移动触发,若要鼠标移动直接触发,则需要setMouseTraching(true)
2、默认消息响应是什么?如何自定义响应?
查文档;继承重载
3、多个接收者,鼠标事件默认接收者是谁?如何自定义接收者?
默认会被顶层窗口消费,父窗口要接收,需要在子窗口消息响应函数中调用event->ignore()
4、父窗口没有对消息作出响应,有哪些可能的原因?
a.子窗口没有event->ignore
b.子窗口设置了Qt::WA_NoMousePropagation属性
5、Disable状态对鼠标事件的影响(子窗口不设ignore)?
父窗口setMouseTracking(true),子窗口setDisabled(true),此时,
a.鼠标移动到子窗口,父窗口不响应move事件;单击拖动时,父窗口响应move事件
b.子窗口追加setMouseTracking(true),鼠标移动到子窗口,父窗口响应move事件;单击拖动时,父窗口也响应move事件
6、如何确定是哪个鼠标键被按下?
调用event->button()或event->buttons()
7、如何确定鼠标坐标位置(相对于事件接收窗口和相对于桌面)?
a.函数pos()、x()和y()给出了相对于接收鼠标事件的widget的光标位置。
b.如果由于鼠标事件而移动widget,则使用globalPos()返回的全局位置以避免抖动。
globalPos返回鼠标在事件发生时的全局位置。这在X11这样的异步窗口系统上很重要。每当由于鼠标事件而移动widget时,globalPos()可能与当前指针位置QCursor::pos()和QWidget::mapToGlobal(pos())有很大的不同。(遇到再补充)

posted @ 2021-01-12 22:37  SwiftChocolate  阅读(426)  评论(0编辑  收藏  举报