PySide6.QtCore.QSignalMapper¶
- 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函数可以作为插槽使用之前,这个类非常有用。上面的例子可以通过连接到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
构造一个带有父级
parent
的QSignalMapper
。- map()¶
这个槽根据哪个对象向其发送信号来发出信号。
- map(sender)
- Parameters:
发送者 –
QObject
这个槽根据
sender
对象发出信号。- mappedInt(i)¶
- Parameters:
i – 整数
当从具有整数映射集的对象发出
map()
信号时,会发出此信号。对象的映射整数在i
中传递。另请参阅
当从具有对象映射集的对象发出
map()
信号时,会发出此信号。映射提供的对象在object
中传递。另请参阅
- mappedString(text)¶
- Parameters:
文本 – str
当从具有字符串映射集的对象发出
map()
信号时,会发出此信号。对象的映射字符串在text
中传递。另请参阅
此函数重载了
mapping()
。返回与
object
关联的发送者QObject
。- mapping(text)
- Parameters:
文本 – str
- Return type:
此函数重载了
mapping()
。- mapping(id)
- Parameters:
id – int
- Return type:
返回与
id
相关联的发送者QObject
。另请参阅
移除
sender
的所有映射。当映射对象被销毁时,这是自动完成的。
注意
这不会断开任何信号。如果
sender
没有被销毁,那么如果需要的话,这需要显式地完成。添加一个映射,以便当从
sender
发出map()
信号时,发出信号mappedObject
(object
)。每个发送者最多只能有一个对象。
另请参阅
- setMapping(sender, text)
- Parameters:
sender –
QObject
文本 – str
添加一个映射,以便当从
sender
发出map()
信号时,会发出信号mappedString
(text
)。每个发送者最多只能有一条文本。
- setMapping(sender, id)
- Parameters:
sender –
QObject
id – int
添加一个映射,以便当从给定的
sender
发出map()
信号时,发出信号mappedInt
(id
)。每个发送者最多只能有一个整数ID。
另请参阅