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