我有一个足够复杂的用户界面,用户可以使用一些帮助。我尝试了工具提示,但我不喜欢它们如何造成用户体验干扰。我想要的是有一个总是出现帮助的区域,其文本会根据鼠标悬停的位置而变化。
处理这个最有效的方法是什么?子类化工具提示?我考虑过 eventFilter,但我已经在使用它来捕获 QTextEdit 框的按键,而且我不确定如何让它适用于每个对象。我进入了新的领域,所以任何帮助都会非常感激。
谢谢!
虽然我还没有完全完成您感兴趣的事情,但我对如何处理它(至少最初是这样)有一个很好的想法,并且它确实涉及使用您自己的事件过滤器对象。以下是基础知识:
QObject
子类作为事件过滤器。这应该获取并存储您要用于显示帮助文本的小部件实例(例如 a QLabel
)。eventFilter
查找QEvent::Enter
事件并适当地设置帮助文本,但不使用事件。您将需要提出一个系统,用于将发出事件的对象(即光标所在的对象)映射到应显示的帮助文本。installEventFilter
其添加到您要触发帮助文本显示的每个小部件中。这是一些骨架代码:
class HelpTextFilter(QtCore.QObject):
def __init__(self, helpTextWidget):
super(HelpTextFilter, self).__init__(helpTextWidget)
# Could call self.parent() to get this every time instead of
# storing it, but that's potentially a lot of method calls.
self.helpTextWidget = helpTextWidget
def eventFilter(self, sender, event):
if event.type() == QtCore.QEvent.Enter:
# Get the help text for 'sender' here...
self.helpTextWidget.setText(helpText)
return False
# Registration
evFilter = HelpTextFilter(helpTextDisplayWidget)
for widget in widgetsThatNeedHelpTextDisplayed:
widget.installEventFilter(evFilter)
希望对你有所帮助。