Found the answer here:
Catch by reference rather than by value
Catching by value causes GCC to use the compiler support function __cxa_get_exception_ptr. This is not available in the compiler support libraries on Symbian OS prior to Symbian^3. Catching by reference avoids this problem.
So replacing
catch (QString error)
with
catch (QString &error)
fixes it.