Настройки многих плагинов зависят от настроек проекта. Часто требуется, когда пользователь qgis открывает проект, прочитать настройки плагина. Когда пользователь создал новый, сбросить эти настройки на "по умолчанию" и привести в порядок GUI введенный плагином.
Многие разработчики решают эту проблему так:
Код: Выделить всё
void QgsCopyrightLabelPlugin::initGui()
{
...
//this resets this plugin up if a project is loaded
connect( qGisInterface->mainWindow(), SIGNAL( projectRead() ), this, SLOT( projectRead() ) );
...
//initialise default values in the gui
projectRead();
}
Я решил проблему точно так же:
Код: Выделить всё
/*
* Initialize the GUI interface for the plugin - this is only called once when the plugin is
* added to the plugin registry in the QGIS application.
*/
void RoadGraphPlugin::initGui()
{
...
connect( mQGisIface->mainWindow(), SIGNAL( projectRead() ), this, SLOT( projectRead() ) );
connect( mQGisIface->mainWindow() , SIGNAL( newProject() ), this, SLOT( newProject() ) );
...
} // RoadGraphPlugin::initGui()
Проблема: замечательные сигналы projeсtRead() и newProject() недокументированы. А метод mQGisIface->mainWindow() возвращает загадочный QWidget* .
У разработчиков qgis есть причины прятать QGisApp* за QWidget*, я уверен. А хоть какое-то описание этих сигналов можно найти только в исходном коде: https://svn.osgeo.org/qgis/trunk/qgis/src/app/qgisapp.h
Предлагаю: ввести в QGisInterface соответствующие сигналы, дабы они были доступны и документированы.
Прошу: одобрить и довести до разработчиков qgis.