- class QSignalMapper#
QSignalMapper
类将可识别发送者的信号捆绑在一起。 更多…摘要#
方法#
def
__init__()
def
mapping()
def
removeMappings()
def
setMapping()
槽函数#
def
map()
信号#
def
mappedInt()
def
mappedObject()
def
mappedString()
注意
此文档可能包含从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
使用父对象
parent
构造一个QSignalMapper
。- map()#
这个槽基于发出信号的哪个对象发出信号而发出信号。
- map(sender)
- 参数:
sender –
QObject
这个槽基于
sender
对象发出信号。- mappedInt(arg__1)#
- 参数:
arg__1 – int
当从设置了整数字典映射的对象发出
map()
信号时,发出此信号。对象映射的整数通过i
传递。另请参阅
当从设置了对象映射的对象发出
map()
信号时,发出此信号。通过 map 提供的对象在object
中传递。另请参阅
- mappedString(arg__1)#
- 参数:
arg__1 – str
当从设置了字符串映射的对象发出
map()
信号时,发出此信号。对象的映射字符串通过text
传递。另请参阅
此函数重载了
mapping()
。返回与指定
object
相关的发送者QObject
。- mapping(text)
- 参数:
text – str
- 返回类型:
此函数重载了
mapping()
。- mapping(id)
- 参数:
id – int
- 返回类型:
返回与指定
id
相关的发送者QObject
。另请参阅
移除与
sender
相关的所有映射。当映射对象被销毁时,这将自动执行。
注意
这不会断开任何信号。如果
sender
未被销毁,则需要显式完成此操作(如果需要)。添加映射,以便当从
sender
发出map()
信号时,会发出信号mappedObject
(object
)。对于每个发送者,最多只能有一个对象。
- setMapping(sender, text)
- 参数:
sender –
QObject
text – str
添加映射,以便当从
sender
发出map()
信号时,会发出信号mappedString
(text
)。对于每个发送者,最多只能有一个文本。
- setMapping(sender, id)
- 参数:
sender –
QObject
id – int
添加映射,以便当从指定的
sender
发出map()
信号时,会发出信号mappedInt
(id
)。对于每个发送者,最多只能有一个整型 ID。
另请参阅