
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.171] |
![]() |
|
![]() |
|
|
Здравствуйте!
При нажатии кнопки "Сохранить настройки" хотелось бы получить состояние флажков в Layout layCheck: ![]() ![]() void Dialog::SaveSettings() { for(int i=0; i < layCheck ->count(); ++i) { qDebug() << layCheck->itemAt(i)->widget(); } } Прикреплённый файл ![]() |
Сообщ.
#2
,
|
|
|
tumanovalex, мы же ранее не зря флажки объявили полем класса в виде вектора? Чтобы легко и просто иметь к ним доступ.
![]() ![]() void Dialog::SaveSettings() { for(const auto &i:Checks) qDebug() << i->text() << ":" << i->checkState() << " : (checked: " << i->isChecked() << ")"; } У QCheckBox'ов вообще есть три состояния: Qt::Unchecked, Qt::PartiallyChecked, Qt::Checked. Это мы в дебаге выводим сразу. Но обычно используют состояния 1 и 3, поэтому их можно ловить и в методе родителя. Это выводим потом. Тут на выбор, как говорится. |
Сообщ.
#3
,
|
|
|
Спасибо большое, понятно. А по поводу интерфейса проекта в Работа с QTCreator без дизайнера есть критические замечания и предложения?
|
Сообщ.
#4
,
|
|
|
А если бы не был вектор полем класса? Можно было бы определить состояние чекбоксов, исходя из их лайаута? Я попробовал
![]() ![]() QObjectList chkList = layCheck->children(); |
Сообщ.
#5
,
|
|
|
Цитата tumanovalex @ Можно было бы определить состояние чекбоксов, исходя из их лайаута? По "моему" последнему варианту, ибо твой не смотрел, можно было бы примерно вот так (я не проверял): ![]() ![]() for (int i = 0; i < checkLayout->count(); ++i) { QLayoutItem *item = checkLayout->itemAt(i); if (item) { QWidget *widget = item->widget(); QCheckBox *checkBox = qobject_cast<QCheckBox*>(widget); if (checkBox) { bool isChecked = checkBox->isChecked(); qDebug() << "Чекбокс " << i << " состояние: " << (isChecked ? "включен" : "выключен"); } } } Но, повторюсь - это плохая практика. Ибо, этот вариант доступа позволителен только в том методе или конструкторе, где мы этот лайяут объявили и инициализировали. Естественно, в других методах такого простого доступа не будет - этот лайаут нужно будет сперва искать по всему дереву лаяутов и контролов, начиная от лаяута самой главной формы, а там "дерево". Поэтому перебор и доступ лучше осуществлять: 1) Либо осуществлять по элементам вектора Checks, как я уже показывал 2) Либо выносить искомый лайаут как указатель-поле класса, чтобы не искать его древовидными спусками. Это не по Бритве Оккама. |
Сообщ.
#6
,
|
|
|
Понял, спасибо.
|
Сообщ.
#7
,
|
|
|
Спасибо большое за код! Флажки правильно опрашиваются через Layout, которые указан в поле класса. Замечание по поводу использования Layout учту. Вопрос был вызван желанием увидеть код другого решения задачи и код работы с потомками.
|