学习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()`保存指针
浙公网安备 33010602011771号