diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 00e3e3e9edac..ebd5f0db8e67 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -5508,200 +5508,204 @@ void QgisApp::about() if ( !sAbt ) { sAbt = new QgsAbout( this ); - QString versionString = QStringLiteral( "
" ); + sAbt->setVersion( QgisApp::getVersionString() ); + } + sAbt->show(); + sAbt->raise(); + sAbt->activateWindow(); +} - versionString += QStringLiteral( "" ).arg( tr( "Libraries" ) ); - versionString += QStringLiteral( "" ).arg( tr( "QGIS version" ), Qgis::version() ); +QString QgisApp::getVersionString() +{ + QString versionString = QStringLiteral( "
%1
%1%2
" ); - if ( QString( Qgis::devVersion() ) == QLatin1String( "exported" ) ) - { - versionString += tr( "QGIS code branch" ); - if ( Qgis::version().endsWith( QLatin1String( "Master" ) ) ) - { - versionString += QLatin1String( "" ); - } - else - { - versionString += QStringLiteral( "" ) - .arg( Qgis::versionInt() / 10000 ).arg( Qgis::versionInt() / 100 % 100 ); - } - } - else - { - versionString += QLatin1String( "" ); - versionString += QStringLiteral( "" ).arg( tr( "QGIS code revision" ), Qgis::devVersion() ); - } - versionString += QLatin1String( "" ); + versionString += QStringLiteral( "" ).arg( tr( "Libraries" ) ); + versionString += QStringLiteral( "" ).arg( tr( "QGIS version" ), Qgis::version() ); - // Qt version - const QString qtVersionCompiled{ QT_VERSION_STR }; - const QString qtVersionRunning{ qVersion() }; - if ( qtVersionCompiled != qtVersionRunning ) + if ( QString( Qgis::devVersion() ) == QLatin1String( "exported" ) ) + { + versionString += tr( "QGIS code branch" ); + if ( Qgis::version().endsWith( QLatin1String( "Master" ) ) ) { - versionString += QStringLiteral( "" ).arg( tr( "Compiled against Qt" ), qtVersionCompiled ); - versionString += QStringLiteral( "" ).arg( tr( "Running against Qt" ), qtVersionRunning ); + versionString += QLatin1String( "" ); } else { - versionString += QStringLiteral( "" ).arg( tr( "Qt version" ), qtVersionCompiled ); + versionString += QStringLiteral( "" ) + .arg( Qgis::versionInt() / 10000 ).arg( Qgis::versionInt() / 100 % 100 ); } + } + else + { versionString += QLatin1String( "" ); + versionString += QStringLiteral( "" ).arg( tr( "QGIS code revision" ), Qgis::devVersion() ); + } + versionString += QLatin1String( "" ); - // Python version - QString pythonVersion; - QgsPythonRunner::run( QStringLiteral( "import platform" ) ); - QgsPythonRunner::eval( QStringLiteral( "platform.python_version()" ), pythonVersion ); - if ( pythonVersion != PYTHON_VERSION ) - { - versionString += QStringLiteral( "" ).arg( tr( "Compiled against Python" ), PYTHON_VERSION ); - versionString += QStringLiteral( "" ).arg( tr( "Running against Python" ), pythonVersion ); - } - else - { - versionString += QStringLiteral( "" ).arg( tr( "Python version" ), PYTHON_VERSION ); - } - versionString += QLatin1String( "" ); + // Qt version + const QString qtVersionCompiled{ QT_VERSION_STR }; + const QString qtVersionRunning{ qVersion() }; + if ( qtVersionCompiled != qtVersionRunning ) + { + versionString += QStringLiteral( "" ).arg( tr( "Compiled against Qt" ), qtVersionCompiled ); + versionString += QStringLiteral( "" ).arg( tr( "Running against Qt" ), qtVersionRunning ); + } + else + { + versionString += QStringLiteral( "" ).arg( tr( "Qt version" ), qtVersionCompiled ); + } + versionString += QLatin1String( "" ); - // GDAL version - const QString gdalVersionCompiled { GDAL_RELEASE_NAME }; - const QString gdalVersionRunning { GDALVersionInfo( "RELEASE_NAME" ) }; - if ( gdalVersionCompiled != gdalVersionRunning ) - { - versionString += QStringLiteral( "" ).arg( tr( "Compiled against GDAL/OGR" ), gdalVersionCompiled ); - versionString += QStringLiteral( "" ).arg( tr( "Running against GDAL/OGR" ), gdalVersionRunning ); - } - else - { - versionString += QStringLiteral( "" ).arg( tr( "GDAL/OGR version" ), gdalVersionCompiled ); - } - versionString += QLatin1String( "" ); + // Python version + QString pythonVersion; + QgsPythonRunner::run( QStringLiteral( "import platform" ) ); + QgsPythonRunner::eval( QStringLiteral( "platform.python_version()" ), pythonVersion ); + if ( pythonVersion != PYTHON_VERSION ) + { + versionString += QStringLiteral( "" ).arg( tr( "Compiled against Python" ), PYTHON_VERSION ); + versionString += QStringLiteral( "" ).arg( tr( "Running against Python" ), pythonVersion ); + } + else + { + versionString += QStringLiteral( "" ).arg( tr( "Python version" ), PYTHON_VERSION ); + } + versionString += QLatin1String( "" ); - // proj - PJ_INFO info = proj_info(); - const QString projVersionCompiled { QStringLiteral( "%1.%2.%3" ).arg( PROJ_VERSION_MAJOR ).arg( PROJ_VERSION_MINOR ).arg( PROJ_VERSION_PATCH ) }; - const QString projVersionRunning { info.version }; - if ( projVersionCompiled != projVersionRunning ) - { - versionString += QStringLiteral( "" ).arg( tr( "Compiled against PROJ" ), projVersionCompiled ); - versionString += QStringLiteral( "" ).arg( tr( "Running against PROJ" ), projVersionRunning ); - } - else - { - versionString += QStringLiteral( "" ).arg( tr( "PROJ version" ), projVersionCompiled ); - } - versionString += QLatin1String( "" ); + // GDAL version + const QString gdalVersionCompiled { GDAL_RELEASE_NAME }; + const QString gdalVersionRunning { GDALVersionInfo( "RELEASE_NAME" ) }; + if ( gdalVersionCompiled != gdalVersionRunning ) + { + versionString += QStringLiteral( "" ).arg( tr( "Compiled against GDAL/OGR" ), gdalVersionCompiled ); + versionString += QStringLiteral( "" ).arg( tr( "Running against GDAL/OGR" ), gdalVersionRunning ); + } + else + { + versionString += QStringLiteral( "" ).arg( tr( "GDAL/OGR version" ), gdalVersionCompiled ); + } + versionString += QLatin1String( "" ); - // CRS database versions - versionString += QStringLiteral( "" ).arg( tr( "EPSG Registry database version" ), QgsProjUtils::epsgRegistryVersion(), QgsProjUtils::epsgRegistryDate().toString( Qt::ISODate ) ); - versionString += QLatin1String( "" ); + // proj + PJ_INFO info = proj_info(); + const QString projVersionCompiled { QStringLiteral( "%1.%2.%3" ).arg( PROJ_VERSION_MAJOR ).arg( PROJ_VERSION_MINOR ).arg( PROJ_VERSION_PATCH ) }; + const QString projVersionRunning { info.version }; + if ( projVersionCompiled != projVersionRunning ) + { + versionString += QStringLiteral( "" ).arg( tr( "Compiled against PROJ" ), projVersionCompiled ); + versionString += QStringLiteral( "" ).arg( tr( "Running against PROJ" ), projVersionRunning ); + } + else + { + versionString += QStringLiteral( "" ).arg( tr( "PROJ version" ), projVersionCompiled ); + } + versionString += QLatin1String( "" ); - // GEOS version - const QString geosVersionCompiled { GEOS_CAPI_VERSION }; - const QString geosVersionRunning { GEOSversion() }; - if ( geosVersionCompiled != geosVersionRunning ) - { - versionString += QStringLiteral( "" ).arg( tr( "Compiled against GEOS" ), geosVersionCompiled ); - versionString += QStringLiteral( "" ).arg( tr( "Running against GEOS" ), geosVersionRunning ); - } - else - { - versionString += QStringLiteral( "" ).arg( tr( "GEOS version" ), geosVersionCompiled ); - } - versionString += QLatin1String( "" ); + // CRS database versions + versionString += QStringLiteral( "" ).arg( tr( "EPSG Registry database version" ), QgsProjUtils::epsgRegistryVersion(), QgsProjUtils::epsgRegistryDate().toString( Qt::ISODate ) ); + versionString += QLatin1String( "" ); - // SQLite version - const QString sqliteVersionCompiled { SQLITE_VERSION }; - const QString sqliteVersionRunning { sqlite3_libversion() }; - if ( sqliteVersionCompiled != sqliteVersionRunning ) - { - versionString += QStringLiteral( "" ).arg( tr( "Compiled against SQLite" ), sqliteVersionCompiled ); - versionString += QStringLiteral( "" ).arg( tr( "Running against SQLite" ), sqliteVersionRunning ); - } - else - { - versionString += QStringLiteral( "" ).arg( tr( "SQLite version" ), sqliteVersionCompiled ); - } - versionString += QLatin1String( "" ); + // GEOS version + const QString geosVersionCompiled { GEOS_CAPI_VERSION }; + const QString geosVersionRunning { GEOSversion() }; + if ( geosVersionCompiled != geosVersionRunning ) + { + versionString += QStringLiteral( "" ).arg( tr( "Compiled against GEOS" ), geosVersionCompiled ); + versionString += QStringLiteral( "" ).arg( tr( "Running against GEOS" ), geosVersionRunning ); + } + else + { + versionString += QStringLiteral( "" ).arg( tr( "GEOS version" ), geosVersionCompiled ); + } + versionString += QLatin1String( "" ); + + // SQLite version + const QString sqliteVersionCompiled { SQLITE_VERSION }; + const QString sqliteVersionRunning { sqlite3_libversion() }; + if ( sqliteVersionCompiled != sqliteVersionRunning ) + { + versionString += QStringLiteral( "" ).arg( tr( "Compiled against SQLite" ), sqliteVersionCompiled ); + versionString += QStringLiteral( "" ).arg( tr( "Running against SQLite" ), sqliteVersionRunning ); + } + else + { + versionString += QStringLiteral( "" ).arg( tr( "SQLite version" ), sqliteVersionCompiled ); + } + versionString += QLatin1String( "" ); - // PDAL + // PDAL #ifdef HAVE_PDAL_QGIS - const QString pdalVersionCompiled { PDAL_VERSION }; + const QString pdalVersionCompiled { PDAL_VERSION }; #if PDAL_VERSION_MAJOR_INT > 1 || (PDAL_VERSION_MAJOR_INT == 1 && PDAL_VERSION_MINOR_INT >= 7) - const QString pdalVersionRunningRaw { QString::fromStdString( pdal::Config::fullVersionString() ) }; + const QString pdalVersionRunningRaw { QString::fromStdString( pdal::Config::fullVersionString() ) }; #else - const QString pdalVersionRunningRaw { QString::fromStdString( pdal::GetFullVersionString() ) }; + const QString pdalVersionRunningRaw { QString::fromStdString( pdal::GetFullVersionString() ) }; #endif - const thread_local QRegularExpression pdalVersionRx { QStringLiteral( "(\\d+\\.\\d+\\.\\d+)" )}; - const QRegularExpressionMatch pdalVersionMatch{ pdalVersionRx.match( pdalVersionRunningRaw ) }; - const QString pdalVersionRunning{ pdalVersionMatch.hasMatch() ? pdalVersionMatch.captured( 1 ) : pdalVersionRunningRaw }; - if ( pdalVersionCompiled != pdalVersionRunning ) - { - versionString += QStringLiteral( "" ).arg( tr( "Compiled against PDAL" ), pdalVersionCompiled ); - versionString += QStringLiteral( "" ).arg( tr( "Running against PDAL" ), pdalVersionRunning ); - } - else - { - versionString += QStringLiteral( "" ).arg( tr( "PDAL version" ), pdalVersionCompiled ); - } - versionString += QLatin1String( "" ); + const thread_local QRegularExpression pdalVersionRx { QStringLiteral( "(\\d+\\.\\d+\\.\\d+)" )}; + const QRegularExpressionMatch pdalVersionMatch{ pdalVersionRx.match( pdalVersionRunningRaw ) }; + const QString pdalVersionRunning{ pdalVersionMatch.hasMatch() ? pdalVersionMatch.captured( 1 ) : pdalVersionRunningRaw }; + if ( pdalVersionCompiled != pdalVersionRunning ) + { + versionString += QStringLiteral( "" ).arg( tr( "Compiled against PDAL" ), pdalVersionCompiled ); + versionString += QStringLiteral( "" ).arg( tr( "Running against PDAL" ), pdalVersionRunning ); + } + else + { + versionString += QStringLiteral( "" ).arg( tr( "PDAL version" ), pdalVersionCompiled ); + } + versionString += QLatin1String( "" ); #endif - // postgres - versionString += QStringLiteral( "" ); + versionString += QLatin1String( "" ); - // spatialite - versionString += QStringLiteral( "" ).arg( spatialite_version() ); + versionString += QStringLiteral( "%1" ).arg( spatialite_version() ); #else - versionString += tr( "No support" ); + versionString += tr( "No support" ); #endif - versionString += QLatin1String( "" ); + versionString += QLatin1String( "" ); - // QWT - versionString += QStringLiteral( "" ).arg( tr( "QWT version" ), QWT_VERSION_STR ); - versionString += QLatin1String( "" ); + // QWT + versionString += QStringLiteral( "" ).arg( tr( "QWT version" ), QWT_VERSION_STR ); + versionString += QLatin1String( "" ); - // QScintilla - versionString += QStringLiteral( "" ).arg( tr( "QScintilla2 version" ), QSCINTILLA_VERSION_STR ); - versionString += QLatin1String( "" ); + // QScintilla + versionString += QStringLiteral( "" ).arg( tr( "QScintilla2 version" ), QSCINTILLA_VERSION_STR ); + versionString += QLatin1String( "" ); - // Operating system - versionString += QStringLiteral( "" ).arg( tr( "OS version" ), QSysInfo::prettyProductName() ); - versionString += QLatin1String( "" ); + // Operating system + versionString += QStringLiteral( "" ).arg( tr( "OS version" ), QSysInfo::prettyProductName() ); + versionString += QLatin1String( "" ); #ifdef QGISDEBUG - versionString += QLatin1String( "" ); - versionString += QStringLiteral( "" ).arg( tr( "This copy of QGIS writes debugging output." ) ); - versionString += QLatin1String( "" ); + versionString += QLatin1String( "" ); + versionString += QStringLiteral( "" ).arg( tr( "This copy of QGIS writes debugging output." ) ); + versionString += QLatin1String( "" ); #endif #ifdef WITH_BINDINGS - if ( mPythonUtils && mPythonUtils->isEnabled() ) + if ( mPythonUtils && mPythonUtils->isEnabled() ) + { + versionString += QStringLiteral( "" ).arg( tr( "Active Python plugins" ) ); + const QStringList activePlugins = mPythonUtils->listActivePlugins(); + for ( const QString &plugin : activePlugins ) { - versionString += QStringLiteral( "" ).arg( tr( "Active Python plugins" ) ); - const QStringList activePlugins = mPythonUtils->listActivePlugins(); - for ( const QString &plugin : activePlugins ) - { - const QString version = mPythonUtils->getPluginMetadata( plugin, QStringLiteral( "version" ) ); - versionString += QStringLiteral( "" ).arg( plugin, version ); - } + const QString version = mPythonUtils->getPluginMetadata( plugin, QStringLiteral( "version" ) ); + versionString += QStringLiteral( "" ).arg( plugin, version ); } + } #endif - versionString += QLatin1String( "
masterRelease %1.%2
%1%2
%1
%1%2%1%2%1%2master%1%2Release %1.%2
%1%2
%1%2%1%2%1%2
%1%2%1%2%1%2
%1%2%1%2%1%2
%1%2%1%2%1%2
%1%2%1%2%1%2
%1%2%1%2%1%2
%1%2 (%3)
%1%2%1%2%1%2
%1%2%1%2%1%2
%1%2 (%3)
%1%2%1%2%1%2
%1%2%1%2%1%2
%1%2%1%2%1%2
%1%2%1%2%1%2
%1%2%1%2%1%2
%1" ).arg( tr( "PostgreSQL client version" ) ); + // postgres + versionString += QStringLiteral( "%1" ).arg( tr( "PostgreSQL client version" ) ); #ifdef HAVE_POSTGRESQL - versionString += QStringLiteral( PG_VERSION ); + versionString += QStringLiteral( PG_VERSION ); #else - versionString += tr( "No support" ); + versionString += tr( "No support" ); #endif - versionString += QLatin1String( "
%1" ).arg( tr( "SpatiaLite version" ) ); + // spatialite + versionString += QStringLiteral( "%1" ).arg( tr( "SpatiaLite version" ) ); #ifdef HAVE_SPATIALITE - versionString += QStringLiteral( "%1
%1%2
%1%2
%1%2
%1%2
%1%2
%1%2
%1
%1
 
%1
%1
%1%2
%1%2
" ); - - sAbt->setVersion( versionString ); - } - sAbt->show(); - sAbt->raise(); - sAbt->activateWindow(); + versionString += QLatin1String( "" ); + return versionString; } QString QgisApp::crsAndFormatAdjustedLayerUri( const QString &uri, const QStringList &supportedCrs, const QStringList &supportedFormats ) const diff --git a/src/app/qgisapp.h b/src/app/qgisapp.h index a0a986622b9c..722e38b174c3 100644 --- a/src/app/qgisapp.h +++ b/src/app/qgisapp.h @@ -931,6 +931,11 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow const QString &baseName, const QString &provider ); + /** + * Returns the html formated string with current versions of the libraries and the active plugins + */ + QString getVersionString(); + public slots: //! save current vector layer QString saveAsFile( QgsMapLayer *layer = nullptr, bool onlySelected = false, bool defaultToAddToMap = true ); diff --git a/src/app/qgsabout.cpp b/src/app/qgsabout.cpp index 2d44a7f941e7..f608d59957be 100644 --- a/src/app/qgsabout.cpp +++ b/src/app/qgsabout.cpp @@ -15,6 +15,7 @@ * * ***************************************************************************/ +#include "qgisapp.h" #include "qgsabout.h" #include "qgsapplication.h" #include "qgsauthmethodregistry.h" @@ -275,8 +276,8 @@ void QgsAbout::setPluginInfo() void QgsAbout::btnCopyToClipboard_clicked() { - QString markdown = txtVersion->toHtml(); - QGuiApplication::clipboard()->setText( markdown ); + const QString versionString = QgisApp::instance()->getVersionString(); + QGuiApplication::clipboard()->setText( versionString ); } void QgsAbout::btnQgisUser_clicked()