On Sat, Jun 20, 2020 at 08:44:19AM +0200, Vadim Peretokin wrote: > Being good users open-source of Qt, [1]we're looking into our > compatibility early on to help report any issues and we're finding this > compatibility code to be rather problematic from the developer > experience point of view: > QMap<QString, QList<QPointF>> customLines; > QMap<QString, QColor> customLinesColor; > // ... > #if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) > auto customLineKeys = customLines.keys(); > QSet<QString> missingKeys{customLineKeys.begin(), > customLineKeys.end()}; > if (!customLinesColor.isEmpty()) { > auto customLinesColorKeys = customLinesColor.keys(); > QSet<QString> > customLinesColorKeysSet{customLinesColorKeys.begin(), > customLinesColorKeys.end()}; > missingKeys.subtract(customLinesColorKeysSet); > } > #else > QSet<QString> > missingKeys{customLines.keys().toSet().subtract(customLinesColor.keys() > .toSet())}; > #endif > Are we doing it wrong or is this a regression in Qt? ([2]QTBUG-83697)
I don't think you are doing anything wrong here. The Qt Creator code base currently has the following in a central header: // Replacement for deprecated Qt functionality #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) template <class T> QSet<T> toSet(const QList<T> &list) { #if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0)) return list.toSet(); #else return QSet<T>(list.begin(), list.end()); #endif } #endif template<class T> QSet<T> toSet(const QVector<T> &vec) { #if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0)) QSet<T> result; for (const T &p : vec) { result.insert(p); } return result; #else return QSet<T>(vec.begin(), vec.end()); #endif } template<class T> QList<T> toList(const QSet<T> &set) { #if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0)) return set.toList(); #else return QList<T>(set.begin(), set.end()); #endif } template <class Key, class T> void addToHash(QHash<Key, T> *result, const QHash<Key, T> &additionalContents) { #if (QT_VERSION < QT_VERSION_CHECK(5, 15, 0)) result->unite(additionalContents); #else result->insert(additionalContents); #endif } and used those functions to replace the previously used member functions. This is not really nice either, but at least keeps the main application code free of preprocessor #if's. Andre' Andre' _______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest