Qt/PySide:链接两个小部件的悬停高亮状态

Qt/PySide:链接两个小部件的悬停高亮状态,qt,pyside,Qt,Pyside,我需要一个函数,它接受两个Qt小部件并“链接”它们,这样无论鼠标悬停在哪一个上面,它们都会通过(标准)悬停高亮显示(如果它们有这样的功能)高亮显示 这需要使用调用者传递给这个函数的任何类型的小部件;此函数不能要求调用方创建小部件子类来实现此功能 以下是我指的一些图片: 通常,当您将光标悬停在小部件上时,它会高亮显示,如图1和图2所示。我需要一个如何设置的例子,这样无论鼠标悬停在哪个小部件上,它们都可以通过标准的悬停高亮显示,如图3所示。理想情况下,该函数将以通用方式工作,只将其参数作为QWid

我需要一个函数,它接受两个Qt小部件并“链接”它们,这样无论鼠标悬停在哪一个上面,它们都会通过(标准)悬停高亮显示(如果它们有这样的功能)高亮显示

这需要使用调用者传递给这个函数的任何类型的小部件;此函数不能要求调用方创建小部件子类来实现此功能

以下是我指的一些图片:

通常,当您将光标悬停在小部件上时,它会高亮显示,如图1和图2所示。我需要一个如何设置的例子,这样无论鼠标悬停在哪个小部件上,它们都可以通过标准的悬停高亮显示,如图3所示。理想情况下,该函数将以通用方式工作,只将其参数作为QWidget进行操作,而不管它们实际上是什么类型的Widget(因为悬停高亮显示毕竟是一种通用的Qt行为)

def链接突出显示(widgetA、widgetB):
... 这里应该放什么。。。
这感觉像是涉及一些相当黑暗的事件黑客,但我的事件黑客傅不是很强


想法?建议?

我做了一些研究,我发现现在有两种方法可以通用

第一部分是检测悬停动作。这应该很容易。只需订阅这两个小部件的和
leavevent
。只要它们是
QWidget
类型,就可以工作。这样,当鼠标进入或离开小部件时,您将收到通知

然后是突出显示部分。这里有两个选项:

  • 您可以在第二个小部件上伪造鼠标事件,基本上模拟第二个鼠标事件。这可以通过
    qApp.sendEvent(小部件,事件)
    完成

  • 您可以更改第二个小部件的调色板。基本上是将普通调色板设置为高亮显示的调色板。在这里,您将使用以下函数:

    palette = widget.getPalette()
    palette.setColor(QPalette.Base, widget.palette().color(QPalette.Highlight))
    widget.setPalette(palette)
    
    这显然需要一些实验。目前,这只适用于使用调色板的小部件样式。对于那些使用CSS的人来说,基本上也需要这样做。找到适用于高亮显示的位,并将其复制到正常状态

    这取决于你的情况有多普遍,可能很容易,也可能很难


  • 让我知道这是怎么回事

    我做了一些研究,我发现现在有两种方法可以通用地做到这一点

    第一部分是检测悬停动作。这应该很容易。只需订阅这两个小部件的和
    leavevent
    。只要它们是
    QWidget
    类型,就可以工作。这样,当鼠标进入或离开小部件时,您将收到通知

    然后是突出显示部分。这里有两个选项:

  • 您可以在第二个小部件上伪造鼠标事件,基本上模拟第二个鼠标事件。这可以通过
    qApp.sendEvent(小部件,事件)
    完成

  • 您可以更改第二个小部件的调色板。基本上是将普通调色板设置为高亮显示的调色板。在这里,您将使用以下函数:

    palette = widget.getPalette()
    palette.setColor(QPalette.Base, widget.palette().color(QPalette.Highlight))
    widget.setPalette(palette)
    
    这显然需要一些实验。目前,这只适用于使用调色板的小部件样式。对于那些使用CSS的人来说,基本上也需要这样做。找到适用于高亮显示的位,并将其复制到正常状态

    这取决于你的情况有多普遍,可能很容易,也可能很难


  • 让我知道这是怎么回事

    我不确定该举什么样的例子,因为我想举一个如何做到这一点的例子。你的意思是你想要一个标准Qt行为在鼠标悬停期间高亮显示时的图像吗?确切地说,我想要一个你想要的可视化示例,因为你所说的是非常通用的,可以以多种方式解释。除了要求将功能应用于通用小部件,并且不要说它们是QPushButton、QLineEdit等。对于上述内容,我可能认为您有一个,您的主要目标是什么?好的,我用一张图片和一些更具说明性的文字更新了原始信息。我不确定该举什么样的例子,因为我想举一个如何做到这一点的例子。你的意思是你想要一个标准Qt行为在鼠标悬停期间高亮显示时的图像吗?确切地说,我想要一个你想要的可视化示例,因为你所说的是非常通用的,可以以多种方式解释。除了要求将功能应用于通用小部件,并且不要说它们是QPushButton、QLineEdit等。对于上述内容,我可能认为您有一个,您的主要目标是什么?好的,我已经用图像和一些更具说明性的文本更新了原始消息。您所说的“订阅”事件是什么意思?关于Qt,这是我不熟悉的命名法。另外,您是否测试过这种方法?早期的将假事件发布到任何一个小部件的实验都不起作用。就好像在响应事件时,基类代码验证鼠标光标在响应事件时是否在小部件边界内,而不是依赖于随事件发送的事件数据。但这只是我的猜测。你可能是对的,那么方法1就行不通了。谢谢你让我知道,我学到了一些新的东西:-)我用QTest做了一些实验,但这实际上移动了屏幕上的鼠标指针。因此,这不适用于鼠标移动模拟。您所说的“订阅”事件是什么意思?关于Qt,这是我不熟悉的命名法。另外,您是否测试过这种方法?早期的将假事件发布到任何一个小部件的实验都不起作用。就好像在响应事件时,基类代码验证鼠标光标在响应事件时是否在小部件边界内,而不是依赖事件数据