示范如何让QT控件捕捉键盘事件实现…

    扩展QTextEdit,实现类似QQ ctrl+enter 或者msn enter快捷键的效果。
    还是很容易的,需要注意QT中Key_Enter指的是小键盘的回车,Key_Return才是键盘中间的回车。代码如下:

#pragma once

#include
#include

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;
};


你可能感兴趣的:(c/cpp)