QgsMessageBarを表示しない

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 )