首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt:如何防止在QTextEdit中发生QKeyEvent

Qt:如何防止在QTextEdit中发生QKeyEvent
EN

Stack Overflow用户
提问于 2012-04-21 20:42:30
回答 2查看 2K关注 0票数 2

我有这样的代码:

代码语言:javascript
复制
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键后,没有任何反应。这是因为代码行位于正确的位置。

这里有人知道怎么做吗?我想我可以让选项卡事件显示在QTextEdit中,然后删除之前的char (或任何它定义的字符)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-21 21:48:22

使用事件过滤器函数的返回值将允许您控制QTextEdit接收哪些事件(如果您确实不想只是将其子类化):

代码语言:javascript
复制
if (keyEvent->key() == Qt::Key_Tab)
    return true;

返回true表示事件需要过滤。

票数 3
EN

Stack Overflow用户

发布于 2012-04-21 21:20:12

您不应该需要全局事件过滤器来执行特殊的键盘处理(除非出于某种原因,您不能编辑小部件设置为QTextEdit的部分)。您可以直接从QTextEdit派生一个类并覆盖它的虚拟键方法:

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

要获得给定keyEvent的默认行为,您可以将其传递给QTextEdit::keyPressEvent(),而要忽略它,您只需返回而不调用它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10259001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档