我有一个QSignalMapper,在某个时候我需要将这个QSignalMapper断开到一个插槽,然后再重新连接。做这件事的正确方法是什么?
或者有任何方法让我可以检查一个QSignalMapper是否连接到任何一个插槽?
发布于 2019-01-12 00:00:48
与连接和断开插槽不同,一个简单的解决方案是使用blockSignals()方法阻止信号的发射。
from PyQt5 import QtCore, QtWidgets
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self._mapper = QtCore.QSignalMapper(self)
vlay = QtWidgets.QVBoxLayout(self)
checkbox = QtWidgets.QCheckBox("Block Signals")
checkbox.stateChanged.connect(self.onStateChanged)
vlay.addWidget(checkbox)
for i in range(5):
button = QtWidgets.QPushButton("{}".format(i))
button.clicked.connect(self._mapper.map)
self._mapper.setMapping(button, "button-{}".format(i))
vlay.addWidget(button)
self._mapper.mapped[str].connect(self.onClicked)
@QtCore.pyqtSlot(int)
def onStateChanged(self, state):
self._mapper.blockSignals(state == QtCore.Qt.Checked)
@QtCore.pyqtSlot(str)
def onClicked(self, text):
print(text)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())另一方面,QT5.10中不推荐使用QSignalMapper,因此将来将消除它。
https://stackoverflow.com/questions/54155407
复制相似问题