From 4a5abfcea4ec2e494efd117d278a929f020816c0 Mon Sep 17 00:00:00 2001 From: Eirik Aavitsland Date: Wed, 7 Dec 2022 15:31:05 +0100 Subject: 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 --- examples/widgets/widgets/wiggly/dialog.cpp | 2 +- examples/widgets/widgets/wiggly/wigglywidget.cpp | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'examples/widgets/widgets/wiggly') 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] -- cgit v1.2.3