当为textedit添加一个事件过滤器(该过滤器的作用是禁止在textedit中使用粘贴功能)后,textedit无法使用中文输入法输入中文,且输入位置光标不闪烁,屏蔽掉该过滤器后,textedit可以正常输入中文,输入位置光标正常闪烁。
事件过滤器如下:
//事件过滤器
bool Widget::eventFilter(QObject *obj, QEvent *event)
{
if (obj == ui->textEdit||obj == ui->cbb_fontnum) {
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
//录入区域禁止粘贴事件过滤
if (keyEvent->matches(QKeySequence::Paste)&&obj == ui->textEdit){
QMessageBox::information(this,
tr("温馨提示"),tr("不要走捷径哦"),
QMessageBox::Ok | QMessageBox::Cancel,
QMessageBox::Ok);
return true;
}
//字号下拉框回车事件过滤
if ((keyEvent->key()==Qt::Key_Enter||keyEvent->key()==Qt::Key_Return)&&obj == ui->cbb_fontnum){
if(ui->cbb_fontnum->currentText().toInt()>0){
QTextCharFormat fmt;
fmt.setFontPointSize (ui->cbb_fontnum->currentText().toInt ());
ui->textEdit->mergeCurrentCharFormat (fmt);
ui->textEdit->setFocus();
}
return true;
}
else {
return false;
}
}
}
else {
// pass the event on to the parent class
return QWidget::eventFilter(obj, event);
}
}
添加事件过滤器代码如下:
ui->textEdit->installEventFilter(this);
输入法确定是已经切换到中文输入法的,因为当我选择其它控件时,输入法的图标还在,如下图
当点击到textedit后,输入法的图标也不见了,且textedit中的光标也不见了如下图
请问问题到底出现在哪?
你上面第一个if将所有的键盘按下事件都过滤掉了,咋能输入呢
你有很多情况是既没有走到return true也没有走到return false或者return QWidget::eventFilter(obj, event)的
把这段
else {
// pass the event on to the parent class
return QWidget::eventFilter(obj, event);
}
else去掉,只留下
return QWidget::eventFilter(obj, event);
保证上面没有走到return的地方都能走到这里