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.


[cid:1729d0a7-362d-4eac-95f1-81aab69f3d1e]


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);
    textLayout.setCacheEnabled(true);
    textLayout.beginLayout();
    while (1) {
        QTextLine line = textLayout.createLine();
        if (!line.isValid()) { break; }
        line.setLineWidth(1000);    // long enough
        qDebug() << line.height();
    }
    textLayout.endLayout();
}

// 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?
_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to