我阅读了文档QSignalMapper
并最终得到了以下代码:
_mapperOn.setMapping(ui->btnRelayOn1, 1);
_mapperOn.setMapping(ui->btnRelayOn2, 2);
_mapperOn.setMapping(ui->btnRelayOn3, 3);
_mapperOn.setMapping(ui->btnRelayOn4, 4);
_mapperOn.setMapping(ui->btnRelayOn5, 5);
_mapperOn.setMapping(ui->btnRelayOn6, 6);
_mapperOn.setMapping(ui->btnRelayOn7, 7);
_mapperOn.setMapping(ui->btnRelayOn8, 8);
_mapperOn.setMapping(ui->btnRelayOnAll, -1);
connect(ui->btnRelayOn1, &QPushButton::clicked, &_mapperOn, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
connect(ui->btnRelayOn2, &QPushButton::clicked, &_mapperOn, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
connect(ui->btnRelayOn3, &QPushButton::clicked, &_mapperOn, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
connect(ui->btnRelayOn4, &QPushButton::clicked, &_mapperOn, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
connect(ui->btnRelayOn5, &QPushButton::clicked, &_mapperOn, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
connect(ui->btnRelayOn6, &QPushButton::clicked, &_mapperOn, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
connect(ui->btnRelayOn7, &QPushButton::clicked, &_mapperOn, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
connect(ui->btnRelayOn8, &QPushButton::clicked, &_mapperOn, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
connect(ui->btnRelayOnAll, &QPushButton::clicked, &_mapperOn, static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map));
connect(&_mapperOn, &QSignalMapper::mappedInt, this, &FormMonitor::setRelayOn);
在我的表单中,我有 8QPushButton
个,我将它们映射到我QSignalMapper
的,以便将它们全部连接到传递索引的同一个插槽。
有用。但我根本不喜欢代码!这与将每个按钮连接到自己的插槽没有太大区别......我希望我误解了文档,并且有更好的方法来避免这种笨拙的代码。我的实际表格包含几个这种设置。