Add exception handler for all events. This will catch uncaught exceptions thrown by event handlers and display an alert instead of crashing. Improvement, not fix, for #1308 and #1268.

git-svn-id: http://svn.osgeo.org/qgis/trunk@9319 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
telwertowski 2008-09-13 17:42:22 +00:00
parent 2392cd4d5d
commit b254446bf8
2 changed files with 20 additions and 3 deletions

View File

@ -19,11 +19,10 @@
#include "qgsproviderregistry.h"
#include <QDir>
#include <QMessageBox>
#include <QPalette>
#include <qgsconfig.h>
#include <iostream>
#include "qgsconfig.h"
// for htonl
#ifdef WIN32
@ -68,6 +67,21 @@ QgsApplication::QgsApplication( int & argc, char ** argv, bool GUIenabled )
QgsApplication::~QgsApplication()
{}
bool QgsApplication::notify( QObject * receiver, QEvent * event )
{
// Send event to receiver and catch unhandled exceptions
bool done = true;
try
{
done = QApplication::notify( receiver, event );
}
catch ( std::exception & e )
{
QMessageBox::critical( activeWindow(), tr( "Exception" ), e.what() );
}
return done;
}
void QgsApplication::setPrefixPath( const QString thePrefixPath, bool useDefaultPaths )
{
mPrefixPath = thePrefixPath;

View File

@ -28,6 +28,9 @@ class CORE_EXPORT QgsApplication: public QApplication
QgsApplication( int & argc, char ** argv, bool GUIenabled );
virtual ~QgsApplication();
//! Catch exceptions when sending event to receiver.
virtual bool notify( QObject * receiver, QEvent * event );
/** Set the active theme to the specified theme.
* The theme name should be a single word e.g. 'default','classic'.
* The theme search path usually will be pkgDataPath + "/themes/" + themName + "/"