关键事件处理

Key event handling

本文关键字:事件处理      更新时间:2023-10-16

目前我想处理基本的按键处理;例如,如果按下键,请执行此操作。但是,这应该有自己的类还是在单个函数中完成?Qt有一种记录关键事件的方法,但我不知道如何进行。我本可以:

void keyPrHandle(QKeyEvent *Ev)
{
   if (Ev->key() == Qt::Key_G)
       ui->label->setText(Ev->text());
}

否则,我将不得不构建一个处理关键事件的类。我不知道Qt如何处理关键事件,也不知道我应该如何实现它。

您可以在派生类中执行此操作。 假设您有 QBase 和 QDerive 类。然后,您可以重新定义事件处理程序:

void QDerived::keyPressEvent(QKeyEvent *Ev)
{
   if (Ev->key() == Qt::Key_G)
       //do something
   QBase::keyPressEvent(Ev);
}

同样在QDerive类中:

protected:
   void keyPressEvent(QKeyEvent *Ev);

您还可以使用事件过滤器处理事件而无需子类化:

http://qt-project.org/doc/qt-4.8/eventsandfilters.html#event-filters

每个QWidget都处理关键事件。应在何处实现密钥处理取决于需要这些密钥的位置。如果您的整个程序应该在按键上起作用,则应在QMainWindow中重载keyPressEvent()

当然,如果子小部件处于活动状态(如表单输入小部件),则它们会占用键处理。这可能意味着您还必须拦截这些事件