Я добавил в окно 10 чекбоксов в режиме дизайнера. Это объекты checkbox1,checkbox2,...,checkbox10
, не являющиеся массивом. Как мне проверить состояние каждого чекбокса в цикле?
Чтобы обойти все дочерние объекты определённого типа можно использовать QObject::findWidget
. Пример:
for (auto child: parentWidget.findChildren<QCheckBox*>())
{
// Работаем с child как QCheckBox*
if (child->isChecked()) ...
}
Если категорически не хочется создавать форму процедурно, то можно перебирать дочерние элементы. Метод
QObjectList &QObject::children()
вам в помощь. QObjectList объявлен в Qt вот так
typedef QList<QObject*> QObjectList;
Далее перебираем элементы в поисках элементов с нужным именем (далее код выполняем внутри класса окна после инициализации ui). Если найден нужный объект, то преобразуем его в QCheckBox c помощью qobject_cast. Можно сразу поместить указатели на них в 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.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужно перевести число из Little endian в big-endianДано изначально 32 битное число представленное в десятичном виде
Подскажите чайнику,пожалуйста, как обойти ситуациюВ своем приложении решил создать иерархическую структуру данных