5.通过子控件优化同功能重复按钮问题
通过子控件优化同功能重复按钮问题
1.业务背景
右侧按钮发送的功能相同时,都使用槽函数显得代码冗余,按钮的命名有规律。

2.业务实现
widget.cpp
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
for (int i = 1; i <= 9; i++) {//取决于按钮的格式
QString btnName = QString("pushButton_%1").arg(i);//根据名字拼接
QPushButton* btn = findChild<QPushButton *>(btnName)//通过名字找到对应的按钮
if(btn) {
//自定义设置通信的属性
btn->setProperty("buttonId",i);
//为按钮增加对应的信号与槽
connect(btn,SIGNAL(clicked()),this,SLOT(on_command_button_clicked()));
}
}
}
//业务逻辑的实现
void Widget::on_command_button_clicked()
{
//通过sender()监听到发送信号的按钮
QPushButton *btn = qobject_cast<QPushButton *>(sender());
if(btn)
{
//找到对应的按钮id
int num = btn->property("buttonId").toInt();
//qDebug() << num;
//获取到对应的lineEdit
QString lintEditString = QString("lineEdit_%1").arg(num);
QLineEdit *lintEdit = findChild<QLineEdit *>(lintEditString);
if(lintEdit)
{
if(lintEdit->text().size() <= 0) return;
ui->lineEditSendContext->setText(lintEdit->text());
}
//获取到对应的checkbox
QString checkBoxString = QString("checkBox_%1").arg(num);
QCheckBox *checkBox = findChild<QCheckBox *>(checkBoxString);
if(checkBox)
ui->checkBox_sendHEX->setChecked(checkBox->isChecked());
on_btnSend_clicked();
}
}
widget.h
class Widget : public QWidget
{
private slots:
void on_command_button_clicked();
}

浙公网安备 33010602011771号