[Development] Possible bug in Qt Text Engine

Ziming Song s.ziming at hotmail.com
Tue Mar 15 14:41:01 CET 2016

Hi everyone,

I have been fighting with this bug for over a year, but till now I can't find a satisfying solution, so I came here.

I use QPlainTextEdit  to implement my own code editor widget, much like the tutorial does. The widget works fine, except it displays CJK characters with a different line height.

If a line contains only English and Latin characters, QPlainTextEdit would displays them just fine. But if a line contains CJK characters, that line height will be a little larger than other lines.


In the above picture, I put two widget next to each other, and both entered 17 lines. Only the left one has lines with Chinese characters.

I browsed through the qt source code, and I think the problem might in the Qt text engine. Since QTextLine gives different height for english and chinese characters.

void test(QString s) {
    QFont f("Courier 10 Pitch", 12);    // this font doesn't contain CJK characters
    QTextLayout textLayout(s, f);
    while (1) {
        QTextLine line = textLayout.createLine();
        if (!line.isValid()) { break; }
        line.setLineWidth(1000);    // long enough
        qDebug() << line.height();

// in main
test("english");    // output 19
test("??");        // output 20

I've tried reimplementing QPlainTextEdit::paintEvent or inherits from QPlainTextDocumentLayout, but those classes are heavily coupled.

So is this really a bug in Qt text engine. How can I make lines have same line height?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20160315/db1a1992/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ed.png
Type: image/png
Size: 20321 bytes
Desc: ed.png
URL: <http://lists.qt-project.org/pipermail/development/attachments/20160315/db1a1992/attachment.png>

More information about the Development mailing list