P
2 октября 2020 г. 19:35

временная блокировка сигнала в QML

Есть группа из переключателей Switch, создаются динамически с помощью Repeater.
Есть кнопки - "Установить все" и "Сбросить все", прохожу в цикле все переключатели
и устанавливаю нужное состояние.
Проблема в том, что при нажатии конопок при изменении состояния каждого переключателя
отсылаетсыя сигнал сheckedChanged, несколько раз обрабатываетя, хотя достаточно обработать 1 раз.

В Qt можно заблокировать сигнал на время QSignalBlocker,
как что-то подобное сделать в QML?

  1. Repeater {
  2. id: elements
  3. delegate: Switch {
  4. text: elementNmae
  5. checked: true
  6. onCheckedChanged: model.checked = checked
  7. }
  8. }
  1. Button {
  2. text: "All"
  3. onReleased: {
  4. for (var i = 0; i < elements.count; ++i)
  5. elements.itemAt(i).checked = false;
  6. }
  7. }
2

Вам это нравится? Поделитесь в социальных сетях!

2
Evgenii Legotckoi
  • 8 октября 2020 г. 3:41
  • Ответ был помечен как решение.

В QML есть такой тип, как Connections, который имеет возможность включения и выключения через свойство enabled.
Установка Connections может выглядеть таким образом

  1. Repeater {
  2. id: elements
  3. delegate: Switch {
  4. id: switchId
  5. text: elementNmae
  6. checked: true
  7.  
  8. Connections {
  9. target: switchId
  10. onCheckedChanged: model.checked = checked
  11. enabled: true // Установить false, если хотите отключить, появился в Qt версии 5.7 и выше
  12. }
  13. }
  14. }
    P
    • 22 октября 2020 г. 3:10

    Спасибо, то что нужно

      Комментарии

      Только авторизованные пользователи могут публиковать комментарии.
      Пожалуйста, авторизуйтесь или зарегистрируйтесь