Андрей Солодовников Asked:2020-10-23 17:48:31 +0800 CST2020-10-23 17:48:31 +0800 CST 2020-10-23 17:48:31 +0800 CST 如何遍历所有 QCheckBoxes 772 我在设计器模式下向窗口添加了 10 个复选框。这些是checkbox1,checkbox2,...,checkbox10不是数组的对象。如何检查循环中每个复选框的状态? c++ 2 个回答 Voted Best Answer αλεχολυτ 2020-10-23T18:50:59+08:002020-10-23T18:50:59+08:00 要遍历特定类型的所有子对象,您可以使用QObject::findWidget. 例子: for (auto child: parentWidget.findChildren<QCheckBox*>()) { // Работаем с child как QCheckBox* if (child->isChecked()) ... } Vitto74 2020-10-23T18:44:48+08:002020-10-23T18:44:48+08:00 如果您绝对不想以程序方式创建表单,那么您可以遍历子元素。方法 QObjectList &QObject::children() 帮你。QObjectList 在 Qt 中是这样声明的 typedef QList<QObject*> QObjectList; 接下来,我们遍历元素以搜索具有所需名称的元素(此外,代码在 ui 初始化后在窗口类中执行)。如果找到所需的对象,那么我们使用 qobject_cast 将其转换为 QCheckBox。您可以立即将指向它们的指针放在 QList 或 QMap 中。 QObjectList childs = this->children(); QMap<QString, QCheckBox*> boxMap; QList<QCheckBox*> boxList; QList<QObject*>::iterator i; for (i = list.begin(); i != list.end(); ++i){ if (i->objectName().left(8) == "checkbox"){ QCheckBox *box = qobject_cast<QCheckBox *>(i); if (box){ boxMap[box->objectName()] = box; boxList.append(box); } } } 您还可以使用 findChild 按名称和类获取指向子元素的指针,或使用 findChildren 通过字符串或 RegExp 搜索子元素。
要遍历特定类型的所有子对象,您可以使用
QObject::findWidget
. 例子:如果您绝对不想以程序方式创建表单,那么您可以遍历子元素。方法
帮你。QObjectList 在 Qt 中是这样声明的
接下来,我们遍历元素以搜索具有所需名称的元素(此外,代码在 ui 初始化后在窗口类中执行)。如果找到所需的对象,那么我们使用 qobject_cast 将其转换为 QCheckBox。您可以立即将指向它们的指针放在 QList 或 QMap 中。
您还可以使用 findChild 按名称和类获取指向子元素的指针,或使用 findChildren 通过字符串或 RegExp 搜索子元素。