diff options
author | Christian Ehrlicher <ch.ehrlicher@gmx.de> | 2024-02-05 19:42:45 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-02-09 08:37:04 +0000 |
commit | b47ad83d7c84c30506b47787b58cc26a4baa214c (patch) | |
tree | e280ab111757be2d69b6d31caa1141d5a99848e3 | |
parent | 303586dd180a03697c332c451e8659209a21aa1e (diff) |
Q(Plain)TextEdit: don't crash when using a style sheet
When using a style sheet, Q(Plain)TextEdit::isReadOnly() might get
called during the initialization before d->control is properly
initialized which lead to a crash.
This amends 43ce457cbd093fc06d99b5ac833c789ef7c893d5.
Fixes: QTBUG-121697
Fixes: QTBUG-121790
Task-number: QTBUG-1857
Change-Id: I15c357c9eef7f6559bcc2ad89033a3d8e7fcbfef
Reviewed-by: David Faure <david.faure@kdab.com>
(cherry picked from commit c6af5b9c12e1ea4cec007c5efe869636ce97a9d2)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit e9b187a836974f05ba8f42eb72854a5effdc6c15)
(cherry picked from commit ff1f12d5a0f57143e0e3c8d781bb3fdc884af7bc)
-rw-r--r-- | src/widgets/widgets/qplaintextedit.cpp | 2 | ||||
-rw-r--r-- | src/widgets/widgets/qtextedit.cpp | 2 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp | 10 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp | 11 |
4 files changed, 23 insertions, 2 deletions
diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp index 134fc30964..087b7e4d21 100644 --- a/src/widgets/widgets/qplaintextedit.cpp +++ b/src/widgets/widgets/qplaintextedit.cpp @@ -2600,7 +2600,7 @@ void QPlainTextEdit::insertFromMimeData(const QMimeData *source) bool QPlainTextEdit::isReadOnly() const { Q_D(const QPlainTextEdit); - return !(d->control->textInteractionFlags() & Qt::TextEditable); + return !d->control || !(d->control->textInteractionFlags() & Qt::TextEditable); } void QPlainTextEdit::setReadOnly(bool ro) diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp index d403ba73d1..b0f14cfa75 100644 --- a/src/widgets/widgets/qtextedit.cpp +++ b/src/widgets/widgets/qtextedit.cpp @@ -2213,7 +2213,7 @@ void QTextEdit::insertFromMimeData(const QMimeData *source) bool QTextEdit::isReadOnly() const { Q_D(const QTextEdit); - return !(d->control->textInteractionFlags() & Qt::TextEditable); + return !d->control || !(d->control->textInteractionFlags() & Qt::TextEditable); } void QTextEdit::setReadOnly(bool ro) diff --git a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp index 3a1d414376..e5a700298f 100644 --- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp +++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp @@ -133,6 +133,7 @@ private slots: void placeholderVisibility_data(); void placeholderVisibility(); void scrollBarSignals(); + void dontCrashWithCss(); private: void createSelection(); @@ -1944,5 +1945,14 @@ void tst_QPlainTextEdit::scrollBarSignals() QTRY_COMPARE(spy.count(), 5); } +void tst_QPlainTextEdit::dontCrashWithCss() +{ + qApp->setStyleSheet("QWidget { font: 10pt; }"); + QPlainTextEdit edit; + edit.show(); + qApp->setStyleSheet(QString()); +} + + QTEST_MAIN(tst_QPlainTextEdit) #include "tst_qplaintextedit.moc" diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp index 47e85cd839..ef9b0703b7 100644 --- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp +++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp @@ -198,6 +198,8 @@ private slots: void nextFormatAfterEnterPressed_data(); void nextFormatAfterEnterPressed(); + void dontCrashWithCss(); + private: void createSelection(); int blockCount() const; @@ -3064,5 +3066,14 @@ void tst_QTextEdit::nextFormatAfterEnterPressed() QCOMPARE(prevBlockCursor.charFormat().property(it.key()), it.value()); } +void tst_QTextEdit::dontCrashWithCss() +{ + qApp->setStyleSheet("QWidget { font: 10pt; }"); + QTextEdit edit; + edit.show(); + qApp->setStyleSheet(QString()); +} + + QTEST_MAIN(tst_QTextEdit) #include "tst_qtextedit.moc" |