summaryrefslogtreecommitdiffstats
path: root/examples/widgets/widgets/wiggly
diff options
context:
space:
mode:
authorEirik Aavitsland <eirik.aavitsland@qt.io>2022-12-07 15:31:05 +0100
committerEirik Aavitsland <eirik.aavitsland@qt.io>2022-12-12 12:33:20 +0100
commit4a5abfcea4ec2e494efd117d278a929f020816c0 (patch)
treebc0bc905894d74fe9a509a7f9b44920bb7992368 /examples/widgets/widgets/wiggly
parent6a3627b6c5aa5109a80024f3d7b0f938504f7ffe (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.cpp2
-rw-r--r--examples/widgets/widgets/wiggly/wigglywidget.cpp11
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]