QT技巧系列(10)
批量處理或遍歷頁面控件示例代碼
Qt的UI界面編程時,會遇到這種情況,界面上分佈大量相同的控件,如SpinBox_1、SpinBox_2、SpinBox _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)));
}
備註:實戰示例,解疑答惑。
--不間端地思考,實時地批判你的工作!