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();
}
posted @ 2025-05-09 11:50  站着说话不腰疼  阅读(15)  评论(0)    收藏  举报