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)));
}
备注:实战示例,解疑答惑。
--不间端地思考,实时地批判你的工作!