ホーム » QGIS » QgsMessageBarを表示しない

QgsMessageBarを表示しない

CRSが未設定のレイヤを表示するとQgsMessageBarが表示される

「新しいレイヤの投影座標系」を「プロジェクトのCRSを使用」に設定してもこれは避けられない

QgisAppクラスのvalidateCrsを確認すると
[code]
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
{
  省略
}
}
[/code]

「プロジェクトのCRSを使用」に設定するとかならず「messageBar()->pushMessage」が呼ばれてしまう。
フラグなどで対応することはできそうもない。

QgsMessageBarクラス参考

とりあえず以下のコードで表示される時間を1秒に設定
[code]
QSettings().setValue( "qgis/messageTimeout", 1 )
[/code]