21,489
社区成员
发帖
与我相关
我的任务
分享
//构造函数给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);
}


//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
谢谢了,我实在是没头绪了
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);
}