class QSignalMapper#

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

Inheritance diagram of 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函数可以用作槽之前非常实用。上面的例子可以不使用QSignalMapper并且通过连接到一个lambda函数来简化重写。

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])#
参数:

parentQObject

使用父对象 parent 构造一个 QSignalMapper

map()#

这个槽基于发出信号的哪个对象发出信号而发出信号。

map(sender)
参数:

senderQObject

这个槽基于 sender 对象发出信号。

mappedInt(arg__1)#
参数:

arg__1 – int

当从设置了整数字典映射的对象发出 map() 信号时,发出此信号。对象映射的整数通过 i 传递。

另请参阅

setMapping()

mappedObject(arg__1)#
参数:

arg__1QObject

当从设置了对象映射的对象发出 map() 信号时,发出此信号。通过 map 提供的对象在 object 中传递。

另请参阅

setMapping()

mappedString(arg__1)#
参数:

arg__1 – str

当从设置了字符串映射的对象发出 map() 信号时,发出此信号。对象的映射字符串通过 text 传递。

另请参阅

setMapping()

mapping(object)#
参数:

对象QObject

返回类型:

QObject

此函数重载了 mapping()

返回与指定 object 相关的发送者 QObject

mapping(text)
参数:

text – str

返回类型:

QObject

此函数重载了 mapping()

mapping(id)
参数:

id – int

返回类型:

QObject

返回与指定 id 相关的发送者 QObject

另请参阅

setMapping()

removeMappings(sender)#
参数:

senderQObject

移除与 sender 相关的所有映射。

当映射对象被销毁时,这将自动执行。

注意

这不会断开任何信号。如果 sender 未被销毁,则需要显式完成此操作(如果需要)。

setMapping(sender, object)#
参数:

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

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

setMapping(sender, text)
参数:

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

对于每个发送者,最多只能有一个文本。

setMapping(sender, id)
参数:

添加映射,以便当从指定的 sender 发出 map() 信号时,会发出信号 mappedInt (id)。

对于每个发送者,最多只能有一个整型 ID。

另请参阅

mapping()