QT技巧系列(10) 批量处理或遍历页面控件示例代码

QT技巧系列(10)

                                      批量处理或遍历页面控件示例代码

       QtUI界面编程时,会遇到这种情况,界面上分布大量相同的控件,如SpinBox_1SpinBox_2SpinBox _3 等一系列控件。对这么多控件进行统一设置操作或从中找到某个控件,无疑采用遍历的方式是最好的办法,下面给出几种情况处理方法的代码示例,仅供参考。

 

1、遍历页面中某一类控件

 QList<QLabel *> lblhws = ui->page2->findChildren<QLabel *>();
    foreach (QLabel *lbl, lblhws) {
        if (lbl != nullptr){
            QString lblobj = lbl->objectName();
            if (lblobj.indexOf("labelT1") > -1)
            {
                lbl->setText(tmpList.at(1)+"℃");
            }
            if (lblobj.indexOf("labelT2") > -1)
            {
                lbl->setText(tmpList.at(0)+"%RH");
            }
        }
}

2、循环访问一组名称类似的控件
     页面控件根据数据库名称建立,操作也根据数据名称批量处理:

    

for (int i=0;i < countSensor; i++)
    {
        QPushButton *btn = this->findChild<QPushButton *>
            ("pushButton_SW"+QString::number(query.value("SNO").toInt())); 
        if (btn != nullptr){
            btn->setVisible(true);
            btn->setToolTip(dat1);
            btn->setStyleSheet("background:green;"); 
        }
}

3、批量设置页面控件的处理事件:

     如下示例,批量统一设置所有SinBox的valueChanged事件:

QList<QSpinBox *> SpinBox = this->findChildren<QSpinBox *>();
    qDebug() << SpinBox.count();
    for(int i=0; i < SpinBox.count(); i++)
    {
        connect(SpinBox.at(i),SIGNAL(valueChanged(int)),this,SLOT(on_valueChanged(int)));
    }

备注:实战示例,解疑答惑。

           --不间端地思考,实时地批判你的工作!

发布了19 篇原创文章 · 获赞 6 · 访问量 1127

猜你喜欢

转载自blog.csdn.net/ydyuse/article/details/104616481