1

我知道我可以使用 QT C++ 程序读取单个键盘按键压力

void keyPressEvent(QKeyEvent*);

功能。

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

当然,我的意思是为同一个键的单个压力分配了另一个动作,如果超时到期而没有第二个压力,我必须执行另一个例程。

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

我讨厌为这样一个微不足道的任务再创建一个线程的想法。

4

1 回答 1

4

您可以使用 numPress 计数器来计算按键次数。然后在第一次按键 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");
}
于 2013-07-20T11:07:50.753 回答