На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: Majestio
  
> Состояние чекбоксов в Layout (QT)
    Здравствуйте!
    При нажатии кнопки "Сохранить настройки" хотелось бы получить состояние флажков в Layout layCheck:
    ExpandedWrap disabled
      void Dialog::SaveSettings()
      {
        for(int i=0; i < layCheck ->count(); ++i)
        {
          qDebug() << layCheck->itemAt(i)->widget();
        }
      }
    Я не нашел возможности в строке с qDebug у widget() получить состояние флажка. Возможность получить координаты x и y флажка есть, в вот как получить состояние флажка? Помогите, пожалуйста, проект прикрепил.
    Прикреплённый файлПрикреплённый файлqtStudy.zip (1,99 Кбайт, скачиваний: 29)
      tumanovalex, мы же ранее не зря флажки объявили полем класса в виде вектора? Чтобы легко и просто иметь к ним доступ.

      ExpandedWrap disabled
        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, поэтому их можно ловить и в методе родителя. Это выводим потом. Тут на выбор, как говорится.
        Спасибо большое, понятно. А по поводу интерфейса проекта в Работа с QTCreator без дизайнера есть критические замечания и предложения?
        Сообщение отредактировано: tumanovalex -
          А если бы не был вектор полем класса? Можно было бы определить состояние чекбоксов, исходя из их лайаута? Я попробовал
          ExpandedWrap disabled
            QObjectList chkList = layCheck->children();
          Ошибки нет, но и не нашел возможности из chkLiist вытянуть состояние чекбоксов. Как я понял, нужно QObjectList преобразовать в QList<QCheckBox>, а как это сделать - не знаю.
            Цитата tumanovalex @
            Можно было бы определить состояние чекбоксов, исходя из их лайаута?

            По "моему" последнему варианту, ибо твой не смотрел, можно было бы примерно вот так (я не проверял):

            ExpandedWrap disabled
              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) Либо выносить искомый лайаут как указатель-поле класса, чтобы не искать его древовидными спусками. Это не по Бритве Оккама.
              Понял, спасибо.
                Спасибо большое за код! Флажки правильно опрашиваются через Layout, которые указан в поле класса. Замечание по поводу использования Layout учту. Вопрос был вызван желанием увидеть код другого решения задачи и код работы с потомками.
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0352 ]   [ 18 queries used ]   [ Generated: 24.03.25, 20:38 GMT ]