0

How can I override system keyboard layout in a Qt application? I need to change some character codes. The basic problem is that SHIFT+SPACE does not put ZWNJ (U+200C) in Qt text engine (Standard Persian layout has 200C for SHIFT+SPACE and it’s working in all places except Qt application).

This is certainly a bug, but I can’t wait for patch versions. I need to to this manually.

Qt version: 5.3.1
Operating system: Windows (XP upto 8)

sorush-r
  • 10,490
  • 17
  • 89
  • 173

1 Answers1

1

You need to subclass the GUI class (I assume QLineEdit or QTextEdit and implement your own version of keyPressEvent to detect when the user has pressed Shift+Space. Then you can insert the ZWNJ with insertPlainText.

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

In the above code, e->key() == 0x200c should not work. QKeyEvent::key() should return a value from Qt::Key, rather than the Unicode value of ZWNJ (Qt::Key has no element 0x200c). Nevertheless, that's how Qt 5.3 works for me.

adam.baker
  • 1,447
  • 1
  • 14
  • 30