diff options
author | Tim Jenssen <tim.jenssen@qt.io> | 2020-03-30 15:23:46 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@qt.io> | 2020-04-02 09:12:31 +0000 |
commit | e571c98661a5ea648889a46eb62e600510b655d7 (patch) | |
tree | c25a3ffeb24400cbd817847e4e916dc7e5f81465 | |
parent | 7834f172ce2624b19519793b9d45b0ede3c24ff3 (diff) |
QmlDesigner: fix a rarely happen crash
It was difficult to reproduce, but happen regular while importing
something from design tools.
Task-number: QTCREATORBUG-23707
Change-Id: I93e8c8cf9d44ecf20f5754ae48a0599f056a8610
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
4 files changed, 13 insertions, 5 deletions
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index 3714f2bf07..7f2558220f 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -34,6 +34,7 @@ #include <nodemetainfo.h> #include <utils/algorithm.h> +#include <utils/qtcassert.h> #include <QVariant> #include <QMetaProperty> @@ -290,13 +291,15 @@ void ItemLibraryModel::addRoleNames() void ItemLibraryModel::sortSections() { + int nullPointerSectionCount = m_sections.removeAll(QPointer<ItemLibrarySection>()); + QTC_ASSERT(nullPointerSectionCount == 0,;); auto sectionSort = [](ItemLibrarySection *first, ItemLibrarySection *second) { return QString::localeAwareCompare(first->sortingName(), second->sortingName()) < 1; }; std::sort(m_sections.begin(), m_sections.end(), sectionSort); - foreach (ItemLibrarySection *itemLibrarySection, m_sections) + for (auto itemLibrarySection : m_sections) itemLibrarySection->sortItems(); } diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp index 994f72f184..b1db4d128e 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysection.cpp @@ -74,7 +74,7 @@ bool ItemLibrarySection::updateSectionVisibility(const QString &searchText, bool *changed = false; - foreach(ItemLibraryItem *itemLibraryItem, m_sectionEntries.items()) { + for (auto itemLibraryItem : m_sectionEntries.items()) { bool itemVisible = itemLibraryItem->itemName().toLower().contains(searchText) || itemLibraryItem->typeName().toLower().contains(searchText); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp index 5a60dd1eb7..6f7e57763c 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp @@ -27,6 +27,8 @@ #include "itemlibraryitem.h" +#include <utils/qtcassert.h> + #include <QDebug> namespace QmlDesigner { @@ -79,13 +81,15 @@ void ItemLibrarySectionModel::addItem(ItemLibraryItem *element) element->setVisible(true); } -const QList<ItemLibraryItem *> &ItemLibrarySectionModel::items() const +const QList<QPointer<ItemLibraryItem>> &ItemLibrarySectionModel::items() const { return m_itemList; } void ItemLibrarySectionModel::sortItems() { + int nullPointerSectionCount = m_itemList.removeAll(QPointer<ItemLibraryItem>()); + QTC_ASSERT(nullPointerSectionCount == 0,;); auto itemSort = [](ItemLibraryItem *first, ItemLibraryItem *second) { return QString::localeAwareCompare(first->itemName(), second->itemName()) < 1; }; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h index 6e1771a52f..4995e0c8c5 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.h @@ -28,6 +28,7 @@ #include "itemlibrarymodel.h" #include <QObject> +#include <QPointer> namespace QmlDesigner { @@ -47,7 +48,7 @@ public: void addItem(ItemLibraryItem *item); - const QList<ItemLibraryItem *> &items() const; + const QList<QPointer<ItemLibraryItem> > &items() const; void sortItems(); void resetModel(); @@ -56,7 +57,7 @@ private: // functions void addRoleNames(); private: // variables - QList<ItemLibraryItem*> m_itemList; + QList<QPointer<ItemLibraryItem>> m_itemList; QHash<int, QByteArray> m_roleNames; }; |