扩展QTextEdit,实现类似QQ ctrl+enter 或者msn enter快捷键的效果。
还是很容易的,需要注意QT中Key_Enter指的是小键盘的回车,Key_Return才是键盘中间的回车。代码如下:
#pragma once
#include <QTextEdit>
#include <QKeyEvent>
class TriggerTextEdit
: public QTextEdit
{
Q_OBJECT
public:
TriggerTextEdit(QWidget* parent)
: QTextEdit(parent)
, shortcut(NONE_SHORTCUT)
{
}
enum ShortcutType
{
NONE_SHORTCUT = 0,
ENTER_SHORTCUT = 1,
CTRL_ENTER_SHORTCUT = 2,
};
void setShortcut(ShortcutType shortcut_)
{
shortcut = shortcut_;
}
signals:
void triggerSignal();
public:
virtual void keyPressEvent( QKeyEvent * ev )
{
if ((shortcut == ENTER_SHORTCUT && (ev->key() == Qt::Key_Return || ev->key() == Qt::Key_Enter))
|| (shortcut == CTRL_ENTER_SHORTCUT && (ev->key() == Qt::Key_Return || ev->key() == Qt::Key_Enter) && ( ev->modifiers() & Qt::ControlModifier )))
{
emit triggerSignal();
ev->accept();
return;
}
QTextEdit::keyPressEvent(ev);
}
private:
ShortcutType shortcut;
};