tags:

views:

1196

answers:

2

Actually, I do understand major pros and cons of using exceptions. And I use them in my projects by default as error-handling strategy. But now I'm starting a Windows CE project with Qt library, and I see that Qt creators refused to use exceptions in the class hierarchy.

So, if I use exceptions I will need to carefully translate them to and from error codes (or some objects, or just swallow) on my/Qt code bounds. Otherwise, I can refuse to use exceptions in my code and switch to some other strategy.

What would be the best error handling strategy in my case - to use exceptions or to use error-codes, or etc...? Do you have experience with Qt development and what error handling strategy did you use?

A: 

Throwing exceptions out of an event handler is not supported in Qt. Avoid that, and there should not be any problem with exceptions.

erelender
Does cheez say it is actually supported?
Alex Che
No, not supported. Just that you can use them at your own risk.
cheez
+2  A: 

Override QApplication::notify() and handle exceptions there (not 100% on the return value). You can "throw" exceptions from signal handlers but they don't get propagated to Qt in this way.

bool
notify(QObject * rec, QEvent * ev)
{
  try
  {
    return QApplication::notify(rec,ev);
  }
  catch(my::Exception & e)
  {
    QMessageBox::warning(0,
                         tr("An error occurred"),
                         e.message());
  }
  catch(...)
  {
    QMessageBox::warning(0,
                         tr("An unexpected error occurred"),
                         tr("This is likely a bug."));
  }
  return false;
cheez
So, this method will allow us to throw exceptions from event handlers. But what about slots (with direct connection and queued connection)?
Alex Che
You'll have to test...
cheez
That's what we've been doing since Qt 4.0, works nicely!
Ringding