try{ MyDialog dlg(this); dlg.exec();}catch(const std::exception& e){// Вывод сообщения}
#include <QtGui/QDialog>#include <stdexcept>// Dialogclass Dialog : public QDialog{ Q_OBJECTpublic: Dialog() { QMetaObject::invokeMethod(this, "handler", Qt::QueuedConnection); }private: Q_SLOT void handler() { throw std::runtime_error("Error message for user"); }};
#include "MainWindow.h"#include <QtGui/QApplication>#include <QtGui/QMessageBox>#include <stdexcept>// Applicationclass Application : public QApplication{public: Application(int argc, char *argv[]) : QApplication(argc, argv) { }protected: virtual bool notify(QObject * o, QEvent * e) { try { return QApplication::notify(o, e); } catch (const std::exception& e) { QMessageBox::critical(0, QApplication::instance()->applicationName(), e.what(), QMessageBox::Ok, QMessageBox::NoButton); } catch (...) { QMessageBox::critical(0, QApplication::instance()->applicationName(), "Unexpected application error", QMessageBox::Ok, QMessageBox::NoButton); } return false; }};// Entryint main(int argc, char *argv[]){ Application app(argc, argv); Dialog dialog; dialog.exec(); // исключение выбрасывается здесь, здесь же оно и обрабатывается return 0;}
C++ (Qt)if (!Validate()) throw MyException(..);илиif (!Validate()) return ShowError(..);