diff --git a/src/gui/SortFilterHideProxyModel.cpp b/src/gui/SortFilterHideProxyModel.cpp index 0193d9594..20a1dfacc 100644 --- a/src/gui/SortFilterHideProxyModel.cpp +++ b/src/gui/SortFilterHideProxyModel.cpp @@ -16,6 +16,7 @@ */ #include "SortFilterHideProxyModel.h" +#include SortFilterHideProxyModel::SortFilterHideProxyModel(QObject* parent) : QSortFilterProxyModel(parent) @@ -41,3 +42,16 @@ bool SortFilterHideProxyModel::filterAcceptsColumn(int sourceColumn, const QMode return sourceColumn >= m_hiddenColumns.size() || !m_hiddenColumns.at(sourceColumn); } + +bool SortFilterHideProxyModel::lessThan(const QModelIndex& left, const QModelIndex& right) const +{ + auto leftData = sourceModel()->data(left, sortRole()); + auto rightData = sourceModel()->data(right, sortRole()); + if (leftData.type() == QVariant::String) { + QCollator sorter; + sorter.setNumericMode(true); + return sorter.compare(leftData.toString(), rightData.toString()) < 0; + } + + return QSortFilterProxyModel::lessThan(left, right); +} diff --git a/src/gui/SortFilterHideProxyModel.h b/src/gui/SortFilterHideProxyModel.h index 58d9ff703..746ccbd96 100644 --- a/src/gui/SortFilterHideProxyModel.h +++ b/src/gui/SortFilterHideProxyModel.h @@ -32,6 +32,7 @@ public: protected: bool filterAcceptsColumn(int sourceColumn, const QModelIndex& sourceParent) const override; + bool lessThan(const QModelIndex& left, const QModelIndex& right) const override; private: QBitArray m_hiddenColumns;