CRSが未設定のレイヤを表示するとQgsMessageBarが表示される
「新しいレイヤの投影座標系」を「プロジェクトのCRSを使用」に設定してもこれは避けられない
QgisAppクラスのvalidateCrsを確認すると
void QgisApp::validateCrs( QgsCoordinateReferenceSystem &srs ) { static QString sAuthId = QString(); QgsSettings mySettings; QString myDefaultProjectionOption = mySettings.value( QStringLiteral( "Projections/defaultBehavior" ), "prompt" ).toString(); if ( myDefaultProjectionOption == QLatin1String( "prompt" ) ) { 省略 } else if ( myDefaultProjectionOption == QLatin1String( "useProject" ) ) { // XXX TODO: Change project to store selected CS as 'projectCRS' not 'selectedWkt' sAuthId = QgsProject::instance()->crs().authid(); srs.createFromOgcWmsCrs( sAuthId ); QgsDebugMsg( "Layer srs set from project: " + sAuthId ); messageBar()->pushMessage( tr( "CRS was undefined" ), tr( "defaulting to project CRS %1 - %2" ).arg( sAuthId, srs.description() ), Qgis::Warning, messageTimeout() ); } else ///Projections/defaultBehavior==useGlobal { 省略 } }
「プロジェクトのCRSを使用」に設定するとかならず「messageBar()->pushMessage」が呼ばれてしまう。
フラグなどで対応することはできそうもない。
QgsMessageBarクラス参考
とりあえず以下のコードで表示される時間を1秒に設定
QSettings().setValue( "qgis/messageTimeout", 1 )