• 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())有很大的不同。(遇到再补充)

  • 相关阅读:
    转--- 一些概念不错的理解
    python 生产者 --- 消费者
    python GUI 之 tkinter
    读DataSnap源代码(二)
    读DataSnap源代码(一)
    FireDAC探索 (二)
    FireDAC内部初探
    C++Builder XE7 中“匿名”方法实现
    DelphiXE7 Datasnap TDSClientCallbackChannelManager内部实现初探
    C++ Builder使用VC DLL
  • 原文地址:https://www.cnblogs.com/SwiftChocolate/p/14269641.html
Copyright © 2020-2023  润新知