Как отловить исключения с платформой Qt самостоятельно? - PullRequest
3 голосов
/ 15 декабря 2010

Я использую boost :: date_time в моем проекте.Когда дата недействительна, возникает исключение std :: out_of_range C ++.В графическом приложении Qt на платформе Windows это становится исключением SEH, поэтому оно не перехватывается с помощью парадигмы try | catch и программа умирает.Как я могу поймать платформу исключений самостоятельно?

try{
    std::string ts("9999-99-99 99:99:99.999");
    ptime t(time_from_string(ts))
}
catch(...)
{
    // doesn't work on windows
}

РЕДАКТИРОВАНИЕ: Если кто-то не понял, я написал другой пример:

Qt pro file:

TEMPLATE = app
DESTDIR  = bin
VERSION  = 1.0.0
CONFIG  += debug_and_release build_all
TARGET = QExceptExample
SOURCES += exceptexample.cpp \
           main.cpp
HEADERS += exceptexample.h

exceptexample.h

#ifndef __EXCEPTEXAMPLE_H__
#define __EXCEPTEXAMPLE_H__

#include <QtGui/QMainWindow>
#include <QtGui/QMessageBox>
#include <QtGui/QPushButton>
#include <stdexcept>

class PushButton;
class QMessageBox;

class ExceptExample : public QMainWindow
{
  Q_OBJECT
  public:
    ExceptExample();
    ~ExceptExample();
  public slots:
    void throwExcept();
  private:
    QPushButton * throwBtn;
};

#endif

exceptexample.cpp

#include "exceptexample.h"

ExceptExample::ExceptExample()
{
  throwBtn = new QPushButton(this);
  connect(throwBtn, SIGNAL(clicked()), this, SLOT(throwExcept()));
}

ExceptExample::~ExceptExample()
{
}

void ExceptExample::throwExcept()
{
  QMessageBox::information(this, "info", "We are in throwExcept()", 
                           QMessageBox::Ok);
  try{
    throw std::out_of_range("ExceptExample");
  }
  catch(...){
    QMessageBox::information(this, "hidden", "Windows users can't see "
                             "this message", QMessageBox::Ok);
  }
}

main.cpp

#include "exceptexample.h"
#include <QApplication>

int main(int argc, char* argv[])
{
  QApplication app(argc, argv);
  ExceptExample e;
  e.show();
  return app.exec();
}

1 Ответ

5 голосов
/ 07 марта 2011

Добавление ответа из комментариев:

aschelper wrote:

Ваша библиотека Qt скомпилирована с включенной поддержкой исключений C ++?Иногда это не так, что вызывает проблемы.

hoxnox (OP) ответил:

@ aschelper Я перенастроил Qt с опцией -exceptions.Это исправило ситуацию.Если вы отправите ответ, я отмечу его как правильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...