PySide6.QtCore.QSignalMapper

class QSignalMapper

QSignalMapper 类将来自可识别发送者的信号捆绑在一起。更多

PySide6.QtCore.QSignalMapper 的继承图

概要

方法

插槽

信号

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

该类收集了一组无参数的信号,并根据发送信号的对象重新发出带有整数、字符串或小部件参数的信号。请注意,在大多数情况下,您可以使用lambda表达式将自定义参数传递给槽。这样成本更低,并且可以简化代码。

该类支持使用setMapping()将特定字符串、整数、对象和小部件与特定对象进行映射。然后可以将对象的信号连接到map()槽,该槽将发出一个信号(可能是mappedInt()mappedString()mappedObject()),该信号带有与原始信号对象相关联的值。稍后可以使用removeMappings()移除映射。

示例:假设我们想要创建一个包含一组按钮的自定义小部件(如工具调色板)。一种方法是将每个按钮的clicked()信号连接到其自己的自定义槽;但在本例中,我们希望将所有按钮连接到一个槽,并通过被点击的按钮来参数化该槽。

这是一个简单自定义小部件的定义,它有一个信号,clicked(),当点击按钮时,会发出带有按钮文本的信号:

class ButtonWidget(QWidget):

    Q_OBJECT
# public
    ButtonWidget(QStringList texts, QWidget parent = None)
# signals
    def clicked(text):
# private
    signalMapper = QSignalMapper()

我们需要实现的唯一函数是构造函数:

def __init__(self, texts, parent):
    super().__init__(parent)

    signalMapper = QSignalMapper(self)
    gridLayout = QGridLayout(self)
    for i in range(0, texts.size()):
        button = QPushButton(texts[i])
        button.clicked.connect(signalMapper, qOverload<>(&QSignalMapper::map))
    signalMapper.setMapping(button, texts[i])
    gridLayout.addWidget(button, i / 3, i % 3)

signalMapper.mappedString.connect(
self.clicked)

一个文本列表被传递给构造函数。构建了一个信号映射器,并为列表中的每个文本创建了一个QPushButton。我们将每个按钮的clicked()信号连接到信号映射器的map()槽,并在信号映射器中创建从每个按钮到按钮文本的映射。最后,我们将信号映射器的mappedString()信号连接到自定义小部件的clicked()信号。当用户点击一个按钮时,自定义小部件将发出一个clicked()信号,其参数是用户点击的按钮的文本。

在lambda函数可以作为插槽使用之前,这个类非常有用。上面的例子可以通过连接到lambda函数来重写,而不需要使用QSignalMapper

def __init__(self, texts, parent):
    super().__init__(parent)

    gridLayout = QGridLayout(self)
    for i in range(0, texts.size()):
        text = texts[i]
        button = QPushButton(text)
        button.clicked.connect([this, text] { clicked(text); })
        gridLayout.addWidget(button, i / 3, i % 3)

另请参阅

QObject QButtonGroupQActionGroup

__init__([parent=None])
Parameters:

父对象QObject

构造一个带有父级 parentQSignalMapper

map()

这个槽根据哪个对象向其发送信号来发出信号。

map(sender)
Parameters:

发送者QObject

这个槽根据sender对象发出信号。

mappedInt(i)
Parameters:

i – 整数

当从具有整数映射集的对象发出map()信号时,会发出此信号。对象的映射整数在i中传递。

另请参阅

setMapping()

mappedObject(object)
Parameters:

对象QObject

当从具有对象映射集的对象发出map()信号时,会发出此信号。映射提供的对象在object中传递。

另请参阅

setMapping()

mappedString(text)
Parameters:

文本 – str

当从具有字符串映射集的对象发出map()信号时,会发出此信号。对象的映射字符串在text中传递。

另请参阅

setMapping()

mapping(object)
Parameters:

对象QObject

Return type:

QObject

此函数重载了 mapping()

返回与object关联的发送者QObject

mapping(text)
Parameters:

文本 – str

Return type:

QObject

此函数重载了 mapping()

mapping(id)
Parameters:

id – int

Return type:

QObject

返回与id相关联的发送者QObject

另请参阅

setMapping()

removeMappings(sender)
Parameters:

发送者QObject

移除sender的所有映射。

当映射对象被销毁时,这是自动完成的。

注意

这不会断开任何信号。如果sender没有被销毁,那么如果需要的话,这需要显式地完成。

setMapping(sender, object)
Parameters:

添加一个映射,以便当从sender发出map()信号时,发出信号mappedObjectobject)。

每个发送者最多只能有一个对象。

另请参阅

mapping()

setMapping(sender, text)
Parameters:
  • senderQObject

  • 文本 – str

添加一个映射,以便当从sender发出map()信号时,会发出信号mappedStringtext)。

每个发送者最多只能有一条文本。

setMapping(sender, id)
Parameters:

添加一个映射,以便当从给定的sender发出map()信号时,发出信号mappedIntid)。

每个发送者最多只能有一个整数ID。

另请参阅

mapping()