diff --git a/python/pyplugin_installer/installer_data.py b/python/pyplugin_installer/installer_data.py index e15d1ddbe86..bcf1488dc2f 100644 --- a/python/pyplugin_installer/installer_data.py +++ b/python/pyplugin_installer/installer_data.py @@ -30,7 +30,7 @@ from typing import ( from qgis.PyQt.QtCore import (pyqtSignal, QObject, QCoreApplication, QFile, QDir, QDirIterator, QDate, QUrl, QFileInfo, - QLocale, QByteArray) + QLocale, QByteArray, QT_VERSION_STR) from qgis.PyQt.QtXml import QDomDocument from qgis.PyQt.QtNetwork import QNetworkRequest, QNetworkReply from qgis.core import Qgis, QgsSettings, QgsSettingsTree, QgsNetworkRequestParameters @@ -438,9 +438,11 @@ class Repositories(QObject): qgisMaximumVersion = pluginNodes.item(i).firstChildElement("qgis_maximum_version").text().strip() if not qgisMaximumVersion: qgisMaximumVersion = qgisMinimumVersion[0] + ".99" + supports_qt6 = pluginNodes.item(i).firstChildElement("supports_qt6").text().strip().upper() in ("TRUE", "YES") + qt_version = int(QT_VERSION_STR.split('.')[0]) # if compatible, add the plugin to the list if not pluginNodes.item(i).firstChildElement("disabled").text().strip().upper() in ["TRUE", "YES"]: - if isCompatible(pyQgisVersion(), qgisMinimumVersion, qgisMaximumVersion): + if isCompatible(pyQgisVersion(), qgisMinimumVersion, qgisMaximumVersion) and (qt_version != 6 or supports_qt6): # add the plugin to the cache plugins.addFromRepository(plugin) self.mRepositories[reposName]["state"] = Repositories.STATE_LOADED @@ -585,7 +587,12 @@ class Plugins(QObject): if os.path.exists(metadataFile): version = normalizeVersion(pluginMetadata("version")) - if version: + qt_version = int(QT_VERSION_STR.split('.')[0]) + supports_qt6 = pluginMetadata("supportsQt6").strip().upper() in ("TRUE", "YES") + if qt_version == 6 and not supports_qt6: + error = "incompatible" + errorDetails = QCoreApplication.translate("QgsPluginInstaller", "Plugin does not support Qt6 versions of QGIS") + elif version: qgisMinimumVersion = pluginMetadata("qgisMinimumVersion").strip() if not qgisMinimumVersion: qgisMinimumVersion = "0" diff --git a/src/app/qgspluginregistry.cpp b/src/app/qgspluginregistry.cpp index c020c345302..b35903fbbf2 100644 --- a/src/app/qgspluginregistry.cpp +++ b/src/app/qgspluginregistry.cpp @@ -721,6 +721,13 @@ bool QgsPluginRegistry::checkPythonPlugin( const QString &packageName ) bool QgsPluginRegistry::isPythonPluginCompatible( const QString &packageName ) const { #ifdef WITH_BINDINGS +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + const QString supportsQt6 = mPythonUtils->getPluginMetadata( packageName, QStringLiteral( "supportsQt6" ) ).trimmed(); + if ( supportsQt6.compare( QLatin1String( "YES" ), Qt::CaseInsensitive ) != 0 && supportsQt6.compare( QLatin1String( "TRUE" ), Qt::CaseInsensitive ) != 0 ) + { + return false; + } +#endif const QString minVersion = mPythonUtils->getPluginMetadata( packageName, QStringLiteral( "qgisMinimumVersion" ) ); // try to read qgisMaximumVersion. Note checkQgisVersion can cope with "__error__" value. const QString maxVersion = mPythonUtils->getPluginMetadata( packageName, QStringLiteral( "qgisMaximumVersion" ) );