我有这样的代码:
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 (或任何它定义的字符)。
发布于 2012-04-21 21:48:22
使用事件过滤器函数的返回值将允许您控制QTextEdit接收哪些事件(如果您确实不想只是将其子类化):
if (keyEvent->key() == Qt::Key_Tab)
return true;返回true表示事件需要过滤。
发布于 2012-04-21 21:20:12
您不应该需要全局事件过滤器来执行特殊的键盘处理(除非出于某种原因,您不能编辑小部件设置为QTextEdit的部分)。您可以直接从QTextEdit派生一个类并覆盖它的虚拟键方法:
http://doc.qt.io/qt-5/qwidget.html#keyPressEvent
要获得给定keyEvent的默认行为,您可以将其传递给QTextEdit::keyPressEvent(),而要忽略它,您只需返回而不调用它。
https://stackoverflow.com/questions/10259001
复制相似问题