4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||||||||||
1 | |||||||||||
Ошибка выполнения программы при использовании нескольких таймеров15.11.2019, 12:58. Показов 1431. Ответов 12
Здравствуйте, использую в программе несколько таймеров. Принцип работы следующий: есть несколько lineEdit куда вбиваются целые числа, означающие величину счета в минутах, для каждого таймера свой lineEdit. Далее по нажатию кнопки запускается первый таймер, берет значение из Time1_lineEdit и считает до него. Когда счет заканчивается, то запускается слот второго таймера, который берет значение из Time2_lineEdit и так же считает, а потом запускает слот следующего таймера и так последовательно. Но при выполнении происходит ошибка после того, как досчитал первый таймер и начал счет следующий.
Функция нажатия на кнопку:
0
|
15.11.2019, 12:58 | |
Ответы с готовыми решениями:
12
Ошибка выполнения программы при использовании функций Ошибка выполнения сценария при использовании WebBrowser Ошибка времени выполнения при использовании функции scanf_s Ошибка автозапуска Nginx с SSL при использовании нескольких IP |
фрилансер
5503 / 5098 / 1048
Регистрация: 11.10.2019
Сообщений: 13,362
|
|
15.11.2019, 13:04 | 2 |
DmitryDDDD, не видно, где создаётся экземпляр таймера, на который указывает T2_timer
Добавлено через 23 секунды прицепи проект Добавлено через 1 минуту и вообще зачем тут T1_timer->start(); T2_timer->start(); если синглшот ? Добавлено через 33 секунды или это не QTimer-ы ?
0
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||||||||||
15.11.2019, 13:15 [ТС] | 3 | ||||||||||
Алексей1153,
Там проект уже довольно громозский, я код основных файлов приведу за вычетом функций, не относящихся к этому учатску программы
mainwindow.h Кликните здесь для просмотра всего текста
mainwindow.cpp Кликните здесь для просмотра всего текста
Вот сейчас заработало, забыл просто объявить все таймеры T2_timer = new QTimer; T3_timer = new QTimer; T4_timer = new QTimer; T5_timer = new QTimer; T6_timer = new QTimer; T7_timer = new QTimer; T8_timer = new QTimer; Но код все ранво приведу, может подскажите что тут можно оптимизировать, улучшить) Добавлено через 1 минуту QTimer-ы, но почему-то без T1_timer->start(); не запускался таймер, не смотря на то, что сингшот
0
|
фрилансер
5503 / 5098 / 1048
Регистрация: 11.10.2019
Сообщений: 13,362
|
||||||
15.11.2019, 13:20 | 4 | |||||
DmitryDDDD, зачем они тебе вообще тут динамические, объявляй в классе MainWindow сразу объекты
QTimer::singleShot - статическая функция, ей не нужен объект класса
0
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
15.11.2019, 13:21 [ТС] | 5 |
Алексей1153, еще сразу вопрос, вот у меня каждый таймер берет значение из соответствующего lineEdit, принимает его за время для отсчета, но еще и записывает в label. А можно как-то сделать так, чтобы в label выводилось, сколько осталось время до конца счета? Была идея прикрутить к каждому таймеру еще по одному таймеру, которые каждую секунду или минуту уменьшали бы изначальное значение счета на 1 и записывали бы в label. Т.е. например задаем мы 5 минут для счета, вот первый таймер считает, а дополнительный таймер к нему обновляет каждую минуту это значение в label и уменьшает на единицу.
0
|
фрилансер
5503 / 5098 / 1048
Регистрация: 11.10.2019
Сообщений: 13,362
|
||||||
15.11.2019, 13:24 | 6 | |||||
вот это всё тоже как-то лишне выглядит
Скопируй и прицепи всё же проект архивом, всё лишнее вырежи. Мне лень накидывать для примера
0
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||||||
15.11.2019, 13:25 [ТС] | 7 | |||||
Алексей1153,
Так?
mainwindow.cpp
0
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
15.11.2019, 13:36 [ТС] | 8 |
Алексей1153, сделал
0
|
фрилансер
5503 / 5098 / 1048
Регистрация: 11.10.2019
Сообщений: 13,362
|
|
15.11.2019, 14:14 | 9 |
DmitryDDDD, я посмотрел, я испугался. Накидал свой пример. В окошках вводятся секунды, кнопка start - запускает каскад таймеров. Справа от едитов считается обратное время.
Всякие косметические тонкости не вычищал, не в них дело. m_list - список окошек для удобства индексирования m_timer_for_visual - отвечает за перерисовку циферок справа m_timer_for_interval - отсчитывает интервалы m_already_connected - флажок, используемый для того, чтобы более одного раза не коннектить таймер к лямбде. А то срабатывать будет много раз
0
|
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,968
|
|
15.11.2019, 16:48 | 10 |
А зачем много таймеров то? Т.к. в каждый момент времени работает только один - одного и достаточно. Просто брать значение счётчика из разных lineedit, и выводить счётчик на разные label'ы.
0
|
фрилансер
5503 / 5098 / 1048
Регистрация: 11.10.2019
Сообщений: 13,362
|
|
15.11.2019, 17:40 | 11 |
alexu_007, вот я ему с одним таймером пример и накидал )
0
|
0 / 0 / 0
Регистрация: 07.05.2015
Сообщений: 10
|
|
15.11.2019, 18:04 | 12 |
При наличии 11-го стандарта, лучше использовать умные указатели!
В противном случае столкнетесь с утечкой памяти, которую в большом проекте найти будет очень сложно.
0
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
16.11.2019, 17:25 [ТС] | 13 |
Алексей1153,
Самому страшно), но в целом если оставить только один таймер (действительно, почему-то даже не подумал, что можно использовать один тайме для всех этих операций) вроде все не так и плохо). Но может мой метод довольно топорный, я в процессе изучения как ООП, так и C++. Поэтому разберусь лучше в вашем коде и воспользуюсь им, спасибо за помощь)
0
|
16.11.2019, 17:25 | |
16.11.2019, 17:25 | |
Помогаю со студенческими работами здесь
13
Ошибка при использовании нескольких переменных с одним именем в разных уровнях вложенности циклов for При использовании программы metasploit возникла ошибка Ошибка "Непредвиденное появление" при использовании оператора условного выполнения команд Ошибка при выполнения программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |