1

我有一个足够复杂的用户界面,用户可以使用一些帮助。我尝试了工具提示,但我不喜欢它们如何造成用户体验干扰。我想要的是有一个总是出现帮助的区域,其文本会根据鼠标悬停的位置而变化。

处理这个最有效的方法是什么?子类化工具提示?我考虑过 eventFilter,但我已经在使用它来捕获 QTextEdit 框的按键,而且我不确定如何让它适用于每个对象。我进入了新的领域,所以任何帮助都会非常感激。

谢谢!

4

1 回答 1

0

虽然我还没有完全完成您感兴趣的事情,但我对如何处理它(至少最初是这样)有一个很好的想法,并且它确实涉及使用您自己的事件过滤器对象。以下是基础知识:

  1. 实现您自己的QObject子类作为事件过滤器。这应该获取并存储您要用于显示帮助文本的小部件实例(例如 a QLabel)。
  2. 在您的事件过滤器对象上,实现eventFilter查找QEvent::Enter事件并适当地设置帮助文本,但不使用事件。您将需要提出一个系统,用于将发出事件的对象(即光标所在的对象)映射到应显示的帮助文本。
  3. 实例化您的过滤器并将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)

希望对你有所帮助。

于 2015-06-02T17:21:27.050 回答