Qt child get key event


化石原创文章,转载请注明来源并保留原文链接


Qt写应用,常见的需求是控件不是当前焦点的时候,也需要侦测按键、鼠标事件。这种需求只要使用eventFilter即可。

1、Widget头文件中,加入

protected:

     bool eventFilter(QObject *obj, QEvent *event);

2、Widget构造中,写上

qApp->installEventFilter(this);

注意,这里的qApp可以看做全局变量,实际上是个宏,在qcoreapplication.h中:

#define qApp QCoreApplication::instance()

这里使用qApp的原因是只要应用是焦点,那么该Widget就能得到事件,不管层级、不管控件自身是否有焦点。

3、具体的过滤方法大致样子

bool TextExplorer::eventFilter(QObject *obj, QEvent *e) {
    if (e->type() == QEvent::KeyPress) {
        QKeyEvent* event = (QKeyEvent*) e;
        if (event->key() == Qt::Key_Right) {
            
        }
        else if(event->key() == Qt::Key_Left) {
           
        }
    }
}

化石原创文章,转载请注明来源并保留原文链接


发表评论

电子邮件地址不会被公开。 必填项已用*标注