LINUX.ORG.RU

Слот с аргументом для QTimer::singleShot()

 


0

1

При определённом событии запускаю таймер, который начинает отсчёт времени. По истечении этого времени должна быть вызвана функция, принимающая в качестве аргумента номер события, который запустил таймер. Проблема в том, что сигнал QSingleShotTimer::timeout() не имеет аргументов, и не может присоединиться к слоту с аргументом. Как мне осуществить задуманное?

★★★★★

1. QTimer::singleShot() - это зло: его невозможно остановить, а рано или поздно этого может захотеться.

2. Созда класс, унаследуй от QObject, сохрани в нем значение, которое нужно передать функции, добавь слот, в котором вызывается эта функция с правильным аргументом, привяжи к ней сигнал таймера

annulen ★★★★★
()

QSignalMapper в документации есть хороший пример.

grondek
()
Ответ на: комментарий от com

Его не рекомендуется использовать в приложениях - это внутренний класс Qt. Кроме того, работа с таймерами через QObject::timerEvent существенно медленнее и сильнее грузит процессор, чем работа с объектом QTimer и его сигналами.

grondek
()
Ответ на: комментарий от grondek

Его не рекомендуется использовать в приложениях - это внутренний класс Qt

звездеж, внутренние классы находятся в приватных заголовках

annulen ★★★★★
()
Ответ на: комментарий от grondek

Это не нужно понимать буквально. В качестве удобной замены для startTimer/timerEvent/killTimer - это то, что доктор прописал.

annulen ★★★★★
()
Ответ на: комментарий от grondek

Бред. QTimer представляет собой ничто иное, как QObject, который делает внутри себя startTimer и выбрасывается сигнал из timerEvent

annulen ★★★★★
()
Ответ на: комментарий от grondek

Его не рекомендуется использовать в приложениях - это внутренний класс Qt.

Это где такое написано? А QTimer как, по твоему, реализован? Не через QObject::timerEvent? Вот это новости! Сходи, чтоли, исходники почитай.

com
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.