diff options
Diffstat (limited to 'src/corelib/itemmodels/qabstractitemmodel.cpp')
-rw-r--r-- | src/corelib/itemmodels/qabstractitemmodel.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp index d645205155..54ea45782d 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.cpp +++ b/src/corelib/itemmodels/qabstractitemmodel.cpp @@ -47,6 +47,7 @@ #include <qvector.h> #include <qstack.h> #include <qbitarray.h> +#include <qdatetime.h> #include <limits.h> @@ -547,6 +548,43 @@ const QHash<int,QByteArray> &QAbstractItemModelPrivate::defaultRoleNames() return *qDefaultRoleNames(); } +bool QAbstractItemModelPrivate::isVariantLessThan(const QVariant &left, const QVariant &right, + Qt::CaseSensitivity cs, bool isLocaleAware) +{ + if (left.userType() == QVariant::Invalid) + return false; + if (right.userType() == QVariant::Invalid) + return true; + switch (left.userType()) { + case QVariant::Int: + return left.toInt() < right.toInt(); + case QVariant::UInt: + return left.toUInt() < right.toUInt(); + case QVariant::LongLong: + return left.toLongLong() < right.toLongLong(); + case QVariant::ULongLong: + return left.toULongLong() < right.toULongLong(); + case QMetaType::Float: + return left.toFloat() < right.toFloat(); + case QVariant::Double: + return left.toDouble() < right.toDouble(); + case QVariant::Char: + return left.toChar() < right.toChar(); + case QVariant::Date: + return left.toDate() < right.toDate(); + case QVariant::Time: + return left.toTime() < right.toTime(); + case QVariant::DateTime: + return left.toDateTime() < right.toDateTime(); + case QVariant::String: + default: + if (isLocaleAware) + return left.toString().localeAwareCompare(right.toString()) < 0; + else + return left.toString().compare(right.toString(), cs) < 0; + } +} + static uint typeOfVariant(const QVariant &value) { |