QT双击键盘事件

QT double click keyboard event

本文关键字:事件 键盘 双击 QT      更新时间:2023-10-16

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

void keyPressEvent(QKeyEvent*);

功能。

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

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

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

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

您可以使用numPress计数器来计算按键次数。然后在第一次按键500毫秒后立即启动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");
}