Я знаю, что могу читать сингл клавиатура нажатие клавиши из программы QT C ++ с использованием
void keyPressEvent(QKeyEvent*);
функция.
Но что я могу сделать, если я хочу назначить действие на два последовательных давления одного и того же клавиатура ключ, разделенный не более чем 100 мс (или любым другим фиксированным тайм-аутом)?
Конечно, я подразумеваю, что какое-то другое действие назначено одному нажатию той же клавиши, и я должен выполнить некоторую другую процедуру, если время ожидания истекло без второго нажатия.
Есть ли более простое решение, чем создание второго потока с таймером?
Я ненавижу идею создания еще одного потока для такой мизерной задачи.
Вы можете использовать счетчик 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");
}
Других решений пока нет …