summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/itemviews/qtreewidget.cpp1
-rw-r--r--tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp33
2 files changed, 34 insertions, 0 deletions
diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp
index d27eaf6805..653a17d2d2 100644
--- a/src/widgets/itemviews/qtreewidget.cpp
+++ b/src/widgets/itemviews/qtreewidget.cpp
@@ -2111,6 +2111,7 @@ void QTreeWidgetItem::sortChildren(int column, Qt::SortOrder order, bool climb)
return;
if (model->isChanging())
return;
+ QTreeModel::SkipSorting skipSorting(model);
int oldSortColumn = view->d_func()->explicitSortColumn;
view->d_func()->explicitSortColumn = column;
emit model->layoutAboutToBeChanged();
diff --git a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp
index 07e0e4f999..69a9bc2953 100644
--- a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp
+++ b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp
@@ -164,6 +164,7 @@ private slots:
void taskQTBUG2844_visualItemRect();
void setChildIndicatorPolicy();
+ void task20345_sortChildren();
public slots:
void itemSelectionChanged();
@@ -3342,6 +3343,38 @@ void tst_QTreeWidget::setChildIndicatorPolicy()
QTRY_COMPARE(delegate.numPaints, 1);
}
+void tst_QTreeWidget::task20345_sortChildren()
+{
+ // This test case is considered successful if it is executed (no crash in sorting)
+ QTreeWidget tw;
+ tw.setColumnCount(3);
+ tw.headerItem()->setText(0, "Col 0");
+ tw.headerItem()->setText(1, "Col 1");
+ tw.header()->setSortIndicator(0, Qt::AscendingOrder);
+ tw.setSortingEnabled(true);
+ tw.show();
+
+ QTreeWidgetItem *rootItem = 0;
+ QTreeWidgetItem *childItem = 0;
+
+ rootItem = new QTreeWidgetItem(&tw, QStringList("a"));
+ childItem = new QTreeWidgetItem(rootItem);
+ childItem->setText(1, "3");
+ childItem = new QTreeWidgetItem(rootItem);
+ childItem->setText(1, "1");
+ childItem = new QTreeWidgetItem(rootItem);
+ childItem->setText(1, "2");
+
+ tw.setCurrentItem(tw.topLevelItem(0));
+
+ QTreeWidgetItem * curItem = tw.currentItem();
+ int childCount = curItem->childCount() + 1;
+
+ QTreeWidgetItem * newItem = new QTreeWidgetItem(curItem);
+ newItem->setText(1, QString::number(childCount));
+ rootItem->sortChildren(1, Qt::AscendingOrder);
+ QVERIFY(1);
+}
QTEST_MAIN(tst_QTreeWidget)