From 2042a091a3e88a77d52b6cdb62f3fc9153d7f5d7 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 2 Oct 2015 14:39:23 +0200 Subject: [PATCH] QAbstractItemView::sizeHintForRow()/Column: Check for null delegate. The delegate may be null in QHeaderView. Task-number: QTBUG-48543 Change-Id: I4d3ba104b0b57431e8765271dc2dc880be096672 Reviewed-by: Giuseppe D'Angelo --- src/widgets/itemviews/qabstractitemview.cpp | 8 ++++---- .../itemviews/qheaderview/tst_qheaderview.cpp | 12 ++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index c5601b63b25..3bb4d0624f8 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -3020,8 +3020,8 @@ int QAbstractItemView::sizeHintForRow(int row) const const QModelIndex index = d->model->index(row, c, d->root); if (QWidget *editor = d->editorForIndex(index).widget.data()) height = qMax(height, editor->height()); - int hint = d->delegateForIndex(index)->sizeHint(option, index).height(); - height = qMax(height, hint); + if (const QAbstractItemDelegate *delegate = d->delegateForIndex(index)) + height = qMax(height, delegate->sizeHint(option, index).height()); } return height; } @@ -3050,8 +3050,8 @@ int QAbstractItemView::sizeHintForColumn(int column) const const QModelIndex index = d->model->index(r, column, d->root); if (QWidget *editor = d->editorForIndex(index).widget.data()) width = qMax(width, editor->sizeHint().width()); - int hint = d->delegateForIndex(index)->sizeHint(option, index).width(); - width = qMax(width, hint); + if (const QAbstractItemDelegate *delegate = d->delegateForIndex(index)) + width = qMax(width, delegate->sizeHint(option, index).width()); } return width; } diff --git a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp index 7e73c19539e..55fcf04846f 100644 --- a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp +++ b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp @@ -239,6 +239,8 @@ private slots: void testStreamWithHide(); void testStylePosition(); + void sizeHintCrash(); + protected: void setupTestData(bool use_reset_model = false); void additionalInit(); @@ -2879,5 +2881,15 @@ void tst_QHeaderView::testStylePosition() QCOMPARE(proxy.lastPosition, QStyleOptionHeader::OnlyOneSection); } +void tst_QHeaderView::sizeHintCrash() +{ + QTreeView treeView; + QStandardItemModel *model = new QStandardItemModel(&treeView); + model->appendRow(new QStandardItem("QTBUG-48543")); + treeView.setModel(model); + treeView.header()->sizeHintForColumn(0); + treeView.header()->sizeHintForRow(0); +} + QTEST_MAIN(tst_QHeaderView) #include "tst_qheaderview.moc"