Как излучать сигналы с интервалом в Qt? - PullRequest
4 голосов
/ 07 августа 2011

Я пишу простую программу связи через порт.На стороне приложения с графическим интерфейсом у меня есть панель с 12 кнопками, которые посылают сигналы на интерфейс параллельного порта.Связь с портом установлена ​​и работает.Теперь мне нужно автоматическое переключение между кнопками.Цель состоит в том, чтобы запустить вид заставки, которая будет периодически активировать кнопки и отправлять сигналы в порт.На практике это будет выглядеть так: таймер запускается на 2 минуты и, если происходит какое-либо событие, он перезапускается.В противном случае, если таймер достигает значения timeout(), подается сигнал qt, переключение начинается, и кнопки автоматически click() 'редактируются с интервалом в 5 секунд.

Мои вопросы:

  • Как включить таймер запуска, который будет сброшен при возникновении какого-либо события, связанного с клавишей или мышью?
  • Как определить переход между кнопками с интервалом ожидания?

1 Ответ

6 голосов
/ 07 августа 2011

Используйте QTimer для части синхронизации.

Для "скринсейвера" создайте таймер одиночного снимка, подключите его к собственному слоту и установите интервал в две минуты.

activeTimer = new QTimer(this);
activeTimer->setInterval(2*60*1000);
activeTimer->setSingleShot(true);
connect(activeTimer, SIGNAL(timeout()), this, SLOT(activateAutoClick()));
activeTimer->start();

В этом пользовательском слоте запустите второй, не одиночный таймер, подключенный ко второму пользовательскому слоту

void YourThing::activateAutoClick() {
  autoTimer->setInterval(5*1000);
  autoTimer->setSingleShot(false);
  connect(autoTimer, SIGNAL(timeout()), this, SLOT(autoClick()));
  autoTimer->start();
}

И делайте все, что хотите, в отношении отправки сигналов на ваш порт в autoClick.

Чтобы отменить любой таймер, просто вызовите их stop() метод / слот.

Чтобы реализовать поведение «заставки», создайте функцию, которая:

  1. Звонки autoTimer->stop() для отключения автоматических кликов
  2. Позволяет activeTimerr->start(2*60*1000) перезапустить тот

И вызывайте эту функцию всякий раз, когда это необходимо. Вы можете сделать это из уже существующих слотов для ваших кнопок или переопределить обработчики событий, такие как QWidget s mouseMoveEvent, keyPressedEvent и подобные. (Обязательно прочитайте документацию по обработчикам, некоторые требуют специальной подготовки.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...