控制软件中常会出现大量功能相似的按钮控件,如图有12个机器使能按钮,如果逐一设置槽函数,重复工作量太大。通过序列化按钮,可以极大减少代码量。
通过QList容器存放12个按钮
//序列化通道按钮
QList<QPushButton*> pushButtonList;
pushButtonList = pushButtonList << ui->target1_pushButton
<< ui->target2_pushButton
<< ui->target3_pushButton
<< ui->target4_pushButton
<< ui->target5_pushButton
<< ui->target6_pushButton
<< ui->target7_pushButton
<< ui->target8_pushButton
<< ui->target9_pushButton
<< ui->target10_pushButton
<< ui->target11_pushButton
<< ui->target12_pushButton;
分别连接12个按钮到槽函数,这里结合了C++11 的Lambda
//绑定12个使能按钮槽函数
for(int i = 0; i < 12; i++){
connect(pushButtonList[i], &QPushButton::toggled, [=](bool s){
on_target_pushButton_toggled(i, s); // 改变第i个端口的输出电平为s
});
}
在槽函数中设置按钮的功能
void MainWindow::on_target_pushButton_toggled(int i, bool s)
{
if(s){
qDebug() << "t" + QString::number(i+1) +" enable!";
if(targetList[i]->is_connected()){
set_panel_green(i+1);
pushBtnFlag++;
if(pushBtnFlag != 0){
ui->upDown_groupBox->setEnabled(true);
ui->turn_groupBox->setEnabled(true);
}
}
}
else{
qDebug() << "t" + QString::number(i+1) +" disable!";
unset_panel_green(i+1);
pushBtnFlag--;
if(pushBtnFlag == 0){
ui->upDown_groupBox->setDisabled(true);
ui->turn_groupBox->setDisabled(true);
}
}
}
综上,即可实现对12个按钮的序列化控制