BlinCT
25 июня 2019 г. 18:27

QTimer меняет значение переменной

Всем привет.
Может кто подсказать как правильнее можно реализовать через таймер смену переменной?
То есть например каждые 5 секунд с момента запуска переменная status меняет значение с false на true

  1. connect(&m_timer, &QTimer::timeout, this, [=]()
  2. {
  3. m_timer.start(50 * 1000);
  4. m_timer.singleShot()
  5. setStatus(true);
  6. });

Или я в не правильном направлении копаю?
Спасибо.

2

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

4
Andrei Yankovich
  • 25 июня 2019 г. 18:43
  • (ред.)
  1. QTimer t;
  2. bool boolStatus = false;
  3. connect(&t, &QTimer::timeout, [&boolStatus]()
  4. {
  5. boolStatus = !boolStatus;
  6. });
  7. t.start(5000);
  8.  

t - должно быть членом класса

    BlinCT
    • 25 июня 2019 г. 18:58

    Вопрос такой, зачем передавать лямбде переменную?
    Я просто думал уже в теле лямбды вызывать функцию setStatus(true) и передавать каждые 5 секунд то true то false.
    И я попробовал вашь вариант и после 5 секунд приложуха упала.

      BlinCT
      • 25 июня 2019 г. 19:08

      Идея такая что у меня есть метод который должен потмо еще возвращать данное значение.

        Andrei Yankovich
        • 25 июня 2019 г. 19:55
        • (ред.)
        • Ответ был помечен как решение.

        падало потому что boolStatus был на стеке метода, после завершения метода переменная убивалась, и на обращении к ней было падение.
        просто сделай вот так:

        1. connect(&t, &QTimer::timeout, [this]()
        2. {
        3. setStatus(!getStatus());
        4. });

        t - таймер член класса

        setStatus и getStatus - методы класса

          Комментарии

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