我正在ImmutableArray
或cancel
中尝试“QTextEdit
”关键代码。当我说取消时,我的意思是,我想根据输入的密钥将“输入”字符变为“无”。示例:如果用户在键盘上点击“a”或“b”,我不希望在文本中显示/输入“a”或“b”,相反,输入将被忽略并变为空/赢不会被处理。
使用C ++ Builder,您有QPlainTextEdit
和“Key”参数。一旦检测到输入的密钥代码,如果您不喜欢它,可以将“密钥”参数设置为0,因此您设置“密钥= 0”并且不会显示密钥笔划。我如何在Qt中实现同样的目标?
让我用代码解释一下:
KeyDown_Event
我如何在Qt中执行此操作?
我累了做e-> setAccepted(false)和e-> Ignore()但它没有任何区别。我认为在执行e-> ignore()时,“char”已经插入到文本框中。使用C ++ Builder,您可以使用KeyDown事件拦截它并取消它。我似乎无法找到Qt的方式。
THX
答案 0 :(得分:2)
与void QObject::installEventFilter ( QObject * filterObj )
示例类似:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
setupUi(this);
textEdit->installEventFilter(this);
}
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if (watched == textEdit && event->type() == QEvent::KeyPress) {
QKeyEvent *e = static_cast < QKeyEvent * >(event);
if (e->key() == Qt::Key_A) {
return true;
}
}
return QMainWindow::eventFilter(watched, event);
}
<强>更新强>
当 IInspectable 注意到时,这对过滤Ctrl+C/Ctrl+V
方法无效。如果您需要这些,您需要连接到QTextEdit::textChanged
信号并手动更新文本。像这样:
static QString oldString;
QString s = textEdit->toPlainText();
if (s == oldString)
return;
int pos = textEdit->textCursor().position();
s.remove('a', Qt::CaseInsensitive);
oldString = s;
textEdit.setPlainText(s);
QTextCursor cursor = textEdit->textCursor();
cursor.setPosition(pos);
textEdit->setTextCursor(cursor);