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)));
    }

備註:實戰示例,解疑答惑。

           --不間端地思考,實時地批判你的工作!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章