grig_p
grig_p8 декабря 2017 г. 7:07

Прерывание таймера в режиме singleShot

Здравствуйте!
Можно ли остановить таймер, запущенный с помощью singleShot?
QTimer::stop(); не срабатывает

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

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

5
Evgenii Legotckoi
  • 8 декабря 2017 г. 7:14

День добрый!
А вы предварительно устанавливали его в режим singleShot методом setSingleShot?

К тому же, если вы воспользовались статическим методом singleShot, то его не получится остановить. Поскольку QTimer::stop() вообще вроде бы не статический, а значит и остановить с помощью него выполнение статического метода singleShot не получится. Следовательно нужно создать объект таймера, вызвать singleshot, а потом только применять метод stop на конкретный объект таймера.
    grig_p
    • 8 декабря 2017 г. 7:24

    так и делал.
    действие срабатывает ровно через пять секунд после первого вызова.

            m_tmResetCursor.stop();
            m_tmResetCursor.singleShot(5000, this, [=]()
            {
                действие
            });
    
      Evgenii Legotckoi
      • 8 декабря 2017 г. 7:38

      В данном конкретном куске кода всё правильно, что срабатывает через 5 секунд. Дело в том, что метод singleshot сразу начинает работать, как только переданы в него все аргументы. А то, что вы там вызываете stop перед singleshot вообще не даёт никакого результата. Поскольку метод вызывается перед singleshot , который начинают работать, после того, как вы застопорили таймер.


      Нужно использовать более классический подход.
      m_tmResetCursor.setSingleShot(true);
      connect(&m_tmResetCursor, &QTimer::activated,this, [=](){ /*действие*/ });
      m_tmResetCursor.start(5000);
      
      // дальше какая-то логика за эти 5 секунд, которая может остановить таймер
      m_tmResetCursor.stop();
        grig_p
        • 8 декабря 2017 г. 7:49

        спасибо. У меня логика такая, что таймер я должен перезапустить по определенному событию. То есть, событие, запускающее таймер, при срабатывании в период его ожидания, должно запустить таймер заново.
        Я сделал так, и это работает:

            connect(&m_tmResetCursor, &QTimer::timeout, this, [=]()
            {
                /*действие*/
            });

        m_tmResetCursor.stop(); m_tmResetCursor.start(5000);
          i
          • 16 июня 2020 г. 10:14

          Вызови QTimer::start и отсчёт начнётся сначала. Тебе даже stop писать не нужно

            Комментарии

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

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:50баллов,
            • Очки рейтинга-4
            m
            • molni99
            • 26 октября 2024 г. 11:37

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:80баллов,
            • Очки рейтинга4
            m
            • molni99
            • 26 октября 2024 г. 11:29

            C++ - Тест 004. Указатели, Массивы и Циклы

            • Результат:20баллов,
            • Очки рейтинга-10
            Последние комментарии
            ИМ
            Игорь Максимов22 ноября 2024 г. 22:51
            Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
            Evgenii Legotckoi
            Evgenii Legotckoi1 ноября 2024 г. 0:37
            Django - Урок 064. Как написать расширение для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
            A
            ALO1ZE19 октября 2024 г. 18:19
            Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
            ИМ
            Игорь Максимов5 октября 2024 г. 17:51
            Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
            d
            dblas55 июля 2024 г. 21:02
            QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
            Сейчас обсуждают на форуме
            m
            moogo22 ноября 2024 г. 18:17
            Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
            Evgenii Legotckoi
            Evgenii Legotckoi25 июня 2024 г. 1:11
            добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
            t
            tonypeachey115 ноября 2024 г. 17:04
            google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
            NSProject
            NSProject4 июня 2022 г. 13:49
            Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

            Следите за нами в социальных сетях