QT之如何在控件中添加子控件,以及如何获取控件中的子控件

	最近做了一个QT上位机,用来给下位机做升级,主要功能如下:首先进行设备搜索,为搜索到的每一个设备创建一个checkbox,并将其放入listWidget中进行展示,之后就可以勾选一个或多个设备进行升级了。
	功能很简单,主要讲下控件下包含子控件的添加及获取。

一、首先看下添加,需要两个槽函数。
1、对查找到的设备信息进行保存,方便后续的使用

typedef struct FIND_DEVICE_INFO{
    QString devname;
    QString addr;
    quint16 Port;
    QString sn;
    QString version;
}deviceInfo;

QVector<deviceInfo> mDevice;

void MainWindow::findDEV_slot(QString devname, QString addr, QString port,QString version){
    deviceInfo info;
    info.addr = addr;
    info.devname = devname;
    info.Port = port.toUShort();
    info.version = version;
    mDevice.push_back(info);
}

2、搜索到的设备进行展示

void MainWindow::findNewDev_slot(QString devname, QString addr, QString port, QString version){

    QString list;
    int i;
    QString DEV="设备名称:" + devname;
    QString IP="IP地址:" + addr;
    QString VER="版本号:" + version;

    QList<QCheckBox*> checkboxList = ui->listWidget_dev_list->findChildren<QCheckBox*>(); //获取所有的QCheckBox

    for(i=0;i<checkboxList.count();i++)
    {
        if(checkboxList[i]->text().contains(addr))//如果IP地址重复,返回
            return;
    }

    list = DEV + "\n" + IP + "\n" + "\n"+ VER;

    QListWidgetItem *item = new QListWidgetItem(this->ui->listWidget_dev_list);
    item->setSizeHint(QSize(200, 80));//设置尺寸
    QCheckBox *box = new QCheckBox(list, this->ui->listWidget_dev_list);
    //box->setChecked(true);
    this->ui->listWidget_dev_list->setItemWidget(item, (QWidget *)box);
}

二、得到所有的下位机设备后,就可以勾选相应的设备进行升级了。代码如下。

QVector<deviceInfo> updateDevice;
void MainWindow::recv_errMsg(QString msg){
    QMessageBox::information(this,"提示",msg);
}
void MainWindow::on_pushButton_update_clicked()
{
    ui->pushButton_update->setDisabled(true);

    QList<QCheckBox*> checkboxList = ui->listWidget_dev_list->findChildren<QCheckBox*>(); //获取所有的QCheckBox
    QByteArray checked_array = 0;
    int i = 0;
    foreach(QCheckBox *checkbox, checkboxList)
    {
        if(checkbox->isChecked())//得到勾选的设备
        {
            updateDevice.push_back(mDevice[i]);
        }
        i++;
    }

    if(updateDevice.size() == 0){
        recv_errMsg("请选则要升级的设备");
        ui->pushButton_update->setEnabled(true);
        return;
    }
    if(this->ui->lineEdit_update_file->text()== "" ){
        recv_errMsg("请选择升级文件");
        ui->pushButton_update->setEnabled(true);
        return;
    }
    //后面就是升级的具体实现了...
  }

如果觉得这篇文章对您有帮助,欢迎点赞、评论、转发、收藏!您的支持是我创作的最大动力!

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极崆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值