我有一个足够复杂的UI,用户可以使用一些帮助。我尝试过工具提示,但我不喜欢他们如何创建UX分心。我想要的是有一个总是出现帮助的区域,文字会根据你悬停鼠标的位置而改变。
处理此问题最有效的方法是什么?子类化工具提示?我想过eventFilter,但是我已经用它来捕获QTextEdit框的按键,我不知道如何才能使它适用于每个对象。我对我来说是一个新的领域,所以任何帮助都会非常感激。
谢谢!
答案 0 :(得分:0)
虽然我还没有完成你感兴趣的事情,但我很清楚我将如何处理它(至少在最初阶段),它确实涉及使用你自己的事件过滤器对象。以下是基础知识:
QObject
子类实现为事件过滤器。这应该采用并存储您要用于显示帮助文本的小部件实例(例如,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)
希望能帮助你。