【问题标题】:Qt/PySide/PyQt - custom tooltip not transparent for mouse eventsQt/PySide/PyQt - 自定义工具提示对鼠标事件不透明
【发布时间】:2014-04-26 20:40:17
【问题描述】:

QToolTip.showText/hideText 和 QWidget.setToolTip() 有一些限制,这使得它不适合我的需求。所以我想实现我自己的类,它的行为类似于工具提示。我正在使用 QLabel,设置了windws 标志和属性,一切正常,只是它对鼠标事件不透明。

在创建应具有此自定义工具提示的小部件时,我使用以下代码 sn-p:

toolTipWidget = QtGui.QLabel()
toolTipWidget.setFrameShape(QtGui.QFrame.StyledPanel)
toolTipWidget.setWindowFlags(QtCore.Qt.ToolTip)
toolTipWidget.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)
toolTipWidget.hide()
self.toolTipWidget = toolTipWidget

在小部件的mouseMoveEvent 中,我有以下内容:

def mouseMoveEvent(self, event):
    text = self.getDescription(event.pos())  # some method which returns a string
    if text:
        self.toolTipWidget.setText(text)
        self.toolTipWidget.move(event.globalPos() + QtCore.QPoint(5, 5))
        self.toolTipWidget.adjustSize()
        self.toolTipWidget.show()
    else:
        self.toolTipWidget.hide()

正如您在代码中看到的,工具提示随鼠标移动。但有时可能会发生鼠标光标移动快到足以进入工具提示区域,然后工具提示接管鼠标事件,这意味着主窗口小部件的mouseMoveEvent没有被调用,工具提示停止移动并获取卡住。这很奇怪,因为我设置了属性WA_TransparentForMouseEvents。有谁知道如何解决这个问题?

【问题讨论】:

    标签: qt pyqt pyside


    【解决方案1】:

    我仍然没有找到为什么我的自定义工具提示中忽略了WA_TransparentForMouseEvents。但我找到了解决我的问题的解决方法。我为主小部件安装了事件过滤器,该过滤器在我的自定义工具提示上处理鼠标移动事件,并调用与主小部件的 mouseMoveEvent 处理程序相同的代码 - 即将工具提示小部件从鼠标光标移开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多