Qt textEdit 无法响应Key_Enter 和 Key_Return

Pafey 2016-10-12 04:32:29
直接在Dlg里面重写 keyPressEvent 及重写textEdit的keyPressEvent 都不行,无法捕获大小回车键
下面的代码是在Dlg里面给textEdit的安装事件过滤器的方式,也不行。
但是可以捕获其他任何按键,如果按住Alt+回车,则能进入回车按钮响应代码,这是为什么?为啥不能单独响应回车键?
求指点



//构造函数给textEdit安装过滤器
ui.textEdit->installEventFilter(this);
...

bool DlgChat::eventFilter(QObject *obj, QEvent *e)
{
Q_ASSERT(obj == ui.textEdit);
if (e->type() == QEvent::KeyPress)
{
QKeyEvent *eventkey = static_cast<QKeyEvent *>(e);
if (eventkey->key() == Qt::Key_Return || eventkey->key() == Qt::Key_Enter)
{
sendSlot();
return true;
}
else if ((eventkey->key() == Qt::Key_Return||eventkey->key() == Qt::Key_Enter) && (eventkey->modifiers() & Qt::ControlModifier))
{
QString str = ui.textEdit->toPlainText();
str = str+"\r\n";
ui.textEdit->setPlainText(str);
return true;
}

}
return QObject::eventFilter(obj, e);
}
...全文
751 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
张小飞Official 2016-10-14
  • 打赏
  • 举报
回复
看看你的类里边成员函数的声明加上QKeyEvent * e的声明了么,打个断点看看问题出在哪里,要不然你可就把代码全都贴上来啊
Pafey 2016-10-14
  • 打赏
  • 举报
回复
Pafey 2016-10-14
  • 打赏
  • 举报
回复
找到问题了 原因是我是用mfc写的主程序调用qt写的界面dll mfc那边回车16进制值与qt的不一样导致
//mfc
#define VK_RETURN         0x0D
//qt
Qt::Key_Return = 0x01000004,
处理方法是: 在mfc的PreTranslateMessage 截获 VK_RETURN ,同时::PostMessage Atl+Enter 给qt dll qt 里面把 alt+enter 组合键当做 enter 整理问题记录:http://blog.csdn.net/qiangzi4646/article/details/52817141
未狂 2016-10-14
  • 打赏
  • 举报
回复
你在QKeyEvent *eventkey = static_cast<QKeyEvent *>(e); 后面家一行 qDebug()<<eventkey; 然后运行起来按回车,看能输出什么?
Pafey 2016-10-14
  • 打赏
  • 举报
回复
各位,路过看到有什么怀疑的地方,请随便敲出来给我参考下 谢谢了,我实在是没头绪了
Pafey 2016-10-14
  • 打赏
  • 举报
回复
引用 3 楼 u010370871 的回复:
看看你的类里边成员函数的声明加上QKeyEvent * e的声明了么,打个断点看看问题出在哪里,要不然你可就把代码全都贴上来啊
断点打在eventFilter入口,其他按键都可以进来,唯独回车键进不来,但按Alt+Enter却又可以 我的qt程序一个带界面的dll给 MFC程序调用的,确认并没有过滤到回车消息啊
Pafey 2016-10-12
  • 打赏
  • 举报
回复
Pafey 2016-10-12
  • 打赏
  • 举报
回复
重写textEdit 的keyPressEvent 也没效果,只能响应Alt+回车。。。。。。。。。。。

void enterTextEdit::keyPressEvent( QKeyEvent * e )
{
	if (e->key() == Qt::Key_Return/*主键盘enter*/ || e->key() == Qt::Key_Enter/*小键盘enter*/)
	{
		emit returnPressed();
		return;
	}
	else if ((e->key() == Qt::Key_Return||e->key() == Qt::Key_Enter) && (e->modifiers() & Qt::ControlModifier))
	{//Ctrl+Enter 键
		QString str = toPlainText();
		str = str+"\r\n";
		setPlainText(str);
		return;
	}
	return QTextEdit::keyPressEvent(e);
}

21,489

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧