#ifndef QT_UTILITIES_COMPAT_H #define QT_UTILITIES_COMPAT_H #include "../global.h" #include #include #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) #define QT_UTILITIES_USE_Q_STRING_VIEW #endif // note: QStringView has been available since Qt 5.10 but for a consistent ABI/API regardless which // Qt 5.x version is used it makes sense to stick to QStringRef when using Qt 5. #ifdef QT_UTILITIES_USE_Q_STRING_VIEW #include #else #include #endif namespace QtUtilities { using Utf16CharType = #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) char16_t #else ushort #endif ; using StringView = #ifdef QT_UTILITIES_USE_Q_STRING_VIEW QStringView #else QStringRef #endif ; /*! * \brief Makes either a QStringView or a QStringRef depending on the Qt version. */ inline StringView makeStringView(const QString &str) { return StringView( #ifndef QT_UTILITIES_USE_Q_STRING_VIEW & #endif str); } /*! * \brief Makes either a QStringView or a QStringRef depending on the Qt version, applying "mid()" parameters. */ template , std::is_signed, std::is_integral, std::is_signed> * = nullptr> inline StringView midRef(const QString &str, PosType1 pos, PosType2 n = -1) { #ifdef QT_UTILITIES_USE_Q_STRING_VIEW return QStringView(str).mid(pos, n); #else return str.midRef(pos, n); #endif } /*! * \brief Splits \a str into QStringViews, QStringRefs or QStrings depending on the Qt version. */ template inline auto splitRef(const QString &str, SplitArgs &&...args) { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) return QStringView(str).split(std::forward(args)...); #elif QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) return str.splitRef(std::forward(args)...); #else return str.split(std::forward(args)...); #endif } } // namespace QtUtilities #if (QT_VERSION < QT_VERSION_CHECK(5, 10, 0)) QT_BEGIN_NAMESPACE /*! * \brief Provides a fallback for qEnvironmentVariable() when using old Qt versions. */ inline QString qEnvironmentVariable(const char *varName, const QString &defaultValue) { const auto val = qgetenv(varName); return !val.isEmpty() ? QString::fromLocal8Bit(val) : defaultValue; } QT_END_NAMESPACE #endif #endif // QT_UTILITIES_COMPAT_H