QT двойное нажатие на событие клавиатуры

Я знаю, что могу читать сингл клавиатура нажатие клавиши из программы QT C ++ с использованием

void keyPressEvent(QKeyEvent*);

функция.

Но что я могу сделать, если я хочу назначить действие на два последовательных давления одного и того же клавиатура ключ, разделенный не более чем 100 мс (или любым другим фиксированным тайм-аутом)?

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

Есть ли более простое решение, чем создание второго потока с таймером?

Я ненавижу идею создания еще одного потока для такой мизерной задачи.

1

Решение

Вы можете использовать счетчик numPress для количества нажатий клавиш. Затем запустите SingleShot сразу после первого нажатия клавиши в течение 500 мс. Через 500 мс вы можете проверить количество нажатий клавиш и решить, какую функцию следует вызывать.

void SO_Qt::keyPressEvent( QKeyEvent* key)
{
if (key->key() == Qt::Key_K)
{
numPress_++;
if (numPress_ == 1)
{
QTimer::singleShot(500, this, SLOT(keyKPressed()));
}
}
}

void SO_Qt::keyKPressed()
{
if (numPress_ == 1) {
func_1();
} else if (numPress_ == 2) {
func_2();
}
numPress_ = 0;
}

void SO_Qt::func_1()
{
QMessageBox::information(this, "1","1");
}

void SO_Qt::func_2()
{
QMessageBox::information(this, "2","2");
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]