Skip to content

Commit

Permalink
Q(Plain)TextEdit: don't crash when using a style sheet
Browse files Browse the repository at this point in the history
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 43ce457.

Fixes: QTBUG-121697
Fixes: QTBUG-121790
Task-number: QTBUG-1857
Pick-to: 6.7 6.6.2 6.6 6.5 6.2
Change-Id: I15c357c9eef7f6559bcc2ad89033a3d8e7fcbfef
Reviewed-by: David Faure <david.faure@kdab.com>
  • Loading branch information
chehrlic committed Feb 7, 2024
1 parent 4370532 commit c6af5b9
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/widgets/widgets/qplaintextedit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion src/widgets/widgets/qtextedit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2222,7 +2222,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)
Expand Down
10 changes: 10 additions & 0 deletions tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ private slots:
void placeholderVisibility_data();
void placeholderVisibility();
void scrollBarSignals();
void dontCrashWithCss();

private:
void createSelection();
Expand Down Expand Up @@ -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"
11 changes: 11 additions & 0 deletions tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,8 @@ private slots:
void nextFormatAfterEnterPressed_data();
void nextFormatAfterEnterPressed();

void dontCrashWithCss();

private:
void createSelection();
int blockCount() const;
Expand Down Expand Up @@ -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"

0 comments on commit c6af5b9

Please sign in to comment.