关键事件处理

时间:2014-11-15 21:04:17

标签: c++ qt

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以在派生类中执行此操作。假设你有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

答案 1 :(得分:1)

每个QWidget处理关键事件。你应该在哪里实现密钥处理取决于你需要它们的位置。如果您的整个程序应该按键操作,则应该在QMainWindow中重载keyPressEvent()

当然,如果子窗口小部件处于活动状态(如表单输入窗口小部件),则会占用密钥处理。这可能意味着你必须拦截这些事件