学习qte5,拦截按键

拦截按键.两种方法.
1,QPlainTextEdit中拦截按键.setKeyPressEvent(&onChar);,QPlainTextEdit对象已覆盖keyPressEvent(QKeyEvent*event)虚方法.不用QtE5安装处理器时,一切正常,要用自己函数覆盖处理器时,当想处理按键事件时,应返回,否则.

// 检查`按键`事件.
bool onChar(void* ev) {
    // 1,取Qt的事件,并保存在类中.
    // 不必创建Qt5 QkeyEvent()事件,只需要从输入参数中取出,并保存在`对象`中,使`QtE5`更轻松处理它.
    QKeyEvent qe = new QKeyEvent('+', ev);
    // 2用事件描述返回事件类型
    writeln(qe.type, "  -- key -> ", qe.key, "  -- count -> ", qe.count);
    // 3按`A`,则禁止处理
    if(qe.key == 65) return false;
    return true;
}
...

2,造QplainTextEdit并重定义按键事件,通过bool onChar()来处理.

    QPlainTextEdit te1 = new QplainTextEdit(null);
    te1.setKeyPressEvent(&onChar);
    //且需要在C++中返回处理该事件的参数
    //从槽调用方法,避免全局变量
    //事件处理器,调用了CTest类的方法
    void test2(CTest* z) {
        (*z).Method();
    }
    class CTest {
        this() {
            QSlot slotKn1 = new QSlot(&test2, aThis); // 就这样
            connect(pb1.QtObj, MSS("clicked()", QSIGNAL), slotKn1.QtObj, MSS("Slot()", QSLOT));
        }
        ...
        void Method() {
        }
    }
    CTest1 w1 = new CTest(); w1.saveThis(&w1);
    //一定要用`saveThis()`保存指针
posted @   zjh6  阅读(31)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示