【发布时间】: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。有谁知道如何解决这个问题?
【问题讨论】: