c++ - Qt多键组合事件

标签 c++ qt events key

我正在使用 Qt 4.6,我想对按住的多键组合(例如 Key_Q+Key_W)使用react。因此,当您按住组合键时,应该始终调用该事件,就像它处理单个键事件的方式一样。我尝试使用 QShortcuts 并为它们启用自动重复,但这没有用:

keyCombos_.push_back(new QShortcut(QKeySequence(Qt::Key_W, Qt::Key_D), this));
connect(keyCombos_[0], SIGNAL(activated()), SLOT(keySequenceEvent_WD()));
setShortcutAutoRepeat(keyCombos_[0]->id(), true);

当使用这种方法时,我也遇到了无法再捕捉单个 Key_W(或键序列中的第一个 Key 是什么)笔画的问题。

谢谢, 托马斯

最佳答案

您可以将按下的键添加到按下的键集中,并在释放键时从该集中删除。因此,您可以将按下的键添加到作为类成员的 QSet 中:

QSet<int> pressedKeys;

您可以在事件过滤器中捕获关键事件:

bool MyWidget::eventFilter(QObject * obj, QEvent * event)
{

    if ( event->type() == QEvent::KeyPress ) {

        pressedKeys += ((QKeyEvent*)event)->key();

        if ( pressedKeys.contains(Qt::Key_D) && pressedKeys.contains(Qt::Key_W) )
        {
            // D and W are pressed
        }

    }
    else if ( event->type() == QEvent::KeyRelease )
    {

        pressedKeys -= ((QKeyEvent*)event)->key();
    }


    return false;
}

不要忘记在构造函数中安装事件过滤器:

this->installEventFilter(this);

关于c++ - Qt多键组合事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3081091/

相关文章:

mysql - 多个查询事件失败

c++ - 在 linux mint 上部署 C++ wxWidgets

c++ - 是否有任何 C/C++ 哈希库(即 python hashlib 之类)

Python Tkinter : Call function after long press spacebar for 1 second

Qt QFile/QTemporaryFile无法读写

c++ - 在 C++ 中禁用警告

javascript - 从 JavaScript 代码执行 Genexus 的事件

c++ - 减去数组中的每个元素并找到其中最大的

c++ - 为什么标准容器要求 allocator_type::value_type 是元素类型?

c++ - 如何在不存储连接的情况下断开 lambda 函数