在Qt应用程序中覆盖键盘映射

时间:2014-07-12 07:26:16

标签: qt5 keyboard-layout

如何在Qt应用程序中覆盖系统键盘布局?我需要更改一些字符代码。基本问题是SHIFT + SPACE没有将ZWNJ(U + 200C)放在Qt文本引擎中(标准波斯语版布局在SHIFT + SPACE中有200C,它在除Qt应用程序之外的所有地方都有效)。

这肯定是一个错误,但我不能等待补丁版本。我需要手动操作。

Qt版本:5.3.1
操作系统:Windows(XP最高8)

1 个答案:

答案 0 :(得分:1)

您需要继承GUI类(我假设QLineEditQTextEdit并实现您自己的keyPressEvent版本以检测用户何时按下Shift + Space。然后您可以插入ZWNJ与insertPlainText

void MyTextEdit::keyPressEvent(QKeyEvent *e)
{
    QTextEdit::keyPressEvent(e);
    if( e->key() == 0x200c )
    {
        insertPlainText( QChar(0x200C) );
    }
}

在上面的代码中,e->key() == 0x200c不起作用。 QKeyEvent::key()应该从Qt::Key返回一个值,而不是ZWNJ的Unicode值(Qt::Key没有元素0x200c)。然而,这就是Qt 5.3如何为我工作。