diff options
author | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2022-12-07 15:31:05 +0100 |
---|---|---|
committer | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2022-12-12 12:33:20 +0100 |
commit | 4a5abfcea4ec2e494efd117d278a929f020816c0 (patch) | |
tree | bc0bc905894d74fe9a509a7f9b44920bb7992368 /examples/widgets/widgets/wiggly | |
parent | 6a3627b6c5aa5109a80024f3d7b0f938504f7ffe (diff) |
wiggly example: add support for emojis etc. (utf16 surrogate pairs)
The venerable wiggly example was created before unicode support was
added to Qt. Hence, when extracting the individual characters from the
string for painting, the code was not prepared to handle that some
characters, like emojis, are composed of two QChar elements.
Fixes: QTBUG-28853
Change-Id: I9804415f92775e2b78fa9fcaf7a2d112153cdce0
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'examples/widgets/widgets/wiggly')
-rw-r--r-- | examples/widgets/widgets/wiggly/dialog.cpp | 2 | ||||
-rw-r--r-- | examples/widgets/widgets/wiggly/wigglywidget.cpp | 11 |
2 files changed, 7 insertions, 6 deletions
diff --git a/examples/widgets/widgets/wiggly/dialog.cpp b/examples/widgets/widgets/wiggly/dialog.cpp index 08a240af56..0f3aa84fd8 100644 --- a/examples/widgets/widgets/wiggly/dialog.cpp +++ b/examples/widgets/widgets/wiggly/dialog.cpp @@ -19,7 +19,7 @@ Dialog::Dialog(QWidget *parent) layout->addWidget(lineEdit); connect(lineEdit, &QLineEdit::textChanged, wigglyWidget, &WigglyWidget::setText); - lineEdit->setText(tr("Hello world!")); + lineEdit->setText(u8"🖖 " + tr("Hello world!")); setWindowTitle(tr("Wiggly")); resize(360, 145); diff --git a/examples/widgets/widgets/wiggly/wigglywidget.cpp b/examples/widgets/widgets/wiggly/wigglywidget.cpp index d7890ef2b7..3e686a67cf 100644 --- a/examples/widgets/widgets/wiggly/wigglywidget.cpp +++ b/examples/widgets/widgets/wiggly/wigglywidget.cpp @@ -39,13 +39,14 @@ void WigglyWidget::paintEvent(QPaintEvent * /* event */) //! [3] QPainter painter(this); //! [3] //! [4] - for (int i = 0; i < text.size(); ++i) { - int index = (step + i) % 16; + int offset = 0; + for (char32_t codePoint : text.toUcs4()) { + int index = (step + offset++) % 16; color.setHsv((15 - index) * 16, 255, 191); painter.setPen(color); - painter.drawText(x, y - ((sineTable[index] * metrics.height()) / 400), - QString(text[i])); - x += metrics.horizontalAdvance(text[i]); + QString symbol = QString::fromUcs4(&codePoint, 1); + painter.drawText(x, y - ((sineTable[index] * metrics.height()) / 400), symbol); + x += metrics.horizontalAdvance(symbol); } } //! [4] |