Qt:如何防止QTextEdit中发生QKeyEvent事件

3

我有这段代码:

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);

    if (event->type() == QEvent::KeyPress)
    {
        if (keyEvent->key() == Qt::Key_Tab)
            // do something
    }
}

现在,我正在QTextEdit中输入。假设我按下tab键,那么QTextEdit中就会出现一个制表符。但是如果我想阻止这种情况发生怎么办?类比一下,如果你熟悉emacs:当处于正确的环境(比如c++模式)时,你可以按下tab键,代码行就会跳到正确的位置(进行缩进)。再次按下tab键后,什么也不会发生。这是因为代码行已经处于正确的位置。
有人知道如何实现吗?我猜我可以让tab事件在QTextEdit中显示,然后删除先前的字符(或者任何定义为)。
2个回答

3

如果您真的不想通过子类化来控制 QTextEdit 接收哪些事件,那么使用事件过滤器函数的返回值将能够帮助您实现此目标:

if (keyEvent->key() == Qt::Key_Tab)
    return true;

返回true表示该事件应被过滤。


2
“不应该需要全局事件过滤器来处理特殊的键盘操作(除非由于某些原因,您无法编辑将小部件设置为QTextEdit的部分)。您可以从QTextEdit派生一个类并重写其虚拟键方法。”

http://doc.qt.io/qt-5/qwidget.html#keyPressEvent

要获取给定的keyEvent的默认行为,您需要将其传递给QTextEdit :: keyPressEvent(),如果要忽略它,则只需返回而不调用该函数即可。

是的,我会完全重写代码。只是在测试Qt框架的某些功能。谢谢你的评论! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接