我知道我可以使用
从QT C ++程序中读取单个键盘键压力void keyPressEvent(QKeyEvent*);
功能
但是我该怎么办,如果我想在同一个键盘键的两个连续压力上分配一个动作,相隔不超过100ms(或任何其他固定超时)?
当然,我暗示将另一个动作分配给同一个键的单个压力,如果超时到期而没有第二个压力,我必须执行另一个例程。
有没有比使用计时器创建第二个线程更简单的解决方案?
我讨厌为一个如此微不足道的任务再创造一个线程。
答案 0 :(得分:4)
您可以使用numPress计数器输入按键次数。然后在第一次按下500 ms后立即启动singleShot。 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");
}