在处理QT左,右按键事件(Handling left and right key events in

2019-09-17 21:24发布

我有一个QTabWidget在我的QT的窗口之一,它似乎是吞咽左/右按键事件。 在主窗口中,我有以下功能:

void VisionWindow::keyPressEvent(QKeyEvent* event) {
    std::cout << event->key() << "\n";
}

当我按下比任何其他键向左或向右,处理器熄灭并打印键代码到控制台。 当我按下左边或右边,它移动到下一个左(或右)标签在标签控件和VisionWindowkeyPressEvent方法永远不会触发。

我试图与该会忽略该事件的子类解决这个问题:

class KeylessTabWidget : public QTabWidget {
    public:
        KeylessTabWidget(QWidget* parent) : QTabWidget(parent) {}
        void keyPressEvent(QKeyEvent* event) { event->ignore(); std::cout << "ignored an event\n"; }
};

主窗口相似,都是按比向左或向右其它键时,这是唯一的调用。 我也看到,基于其中的重点是,有时击球向左或向右将焦点切换到不同的小部件在主窗口中,像复选框。 如果有什么办法可以收回左右键,或者我应该接受的是,这些被广泛默认使用的QT,并切换到别的东西吗?

更新:

我结束了使用#include <QApplication>连同qApp->installEventFilter(this); 在我的窗口构造。 不足之处是标签控件仍然切换标签。 这似乎是一个linux问题 。 从好的方面,我能够捕捉到所有关键事件。 我在事件得到由子控件的其他键吞噬,以及,这解决了这个问题。

Answer 1:

尝试event handler mechanism.May是这些左,右按键事件已经处理提前Keypressevent的。

bool MainWindow::eventFilter(QObject *object, QEvent *e)
{
 if (e->type() == QEvent::KeyPress)
  {
  QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);
  std::cout << event->key() << "\n";
  }
 return false;
}

安装此eventfilter。 (qApplicationobject->installEventFilter(this);)



Answer 2:

我想补充更多的东西,如果你想避免QtWidgetTab对象不切换标签,只需添加返回true:

bool MyObject::eventFilter(QObject *object, QEvent *ev)
{
 if (e->type() == QEvent::KeyPress)
  {
       QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
       qDebug() << keyEvent->key() ;

      return true; //Here the signal was processed and is not going to be handled by QtTabWidget 
  }

 return false;
}

而且不要忘了添加qApp-> installEventFilter(本);



文章来源: Handling left and right key events in QT
标签: qt keyevent