QT双击键盘事件

时间:2013-07-19 20:43:35

标签: c++ qt keyboard-events

我知道我可以使用

从QT C ++程序中读取单个键盘键压力
void keyPressEvent(QKeyEvent*);

功能

但是我该怎么办,如果我想在同一个键盘键的两个连续压力上分配一个动作,相隔不超过100ms(或任何其他固定超时)?

当然,我暗示将另一个动作分配给同一个键的单个压力,如果超时到期而没有第二个压力,我必须执行另一个例程。

有没有比使用计时器创建第二个线程更简单的解决方案?

我讨厌为一个如此微不足道的任务再创造一个线程。

1 个答案:

答案 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");
}