J'utilise boost :: date_time dans mon projet. Lorsque la date n'est pas valide, elle étend l'exception C++ std :: out_of_range. Dans l'application gui de Qt sur la plate-forme Windows, elle devient une exception SEH, elle n'est donc pas prise en compte avec le paradigme try | catch et les matrices de programmation. Comment puis-je attraper la plate-forme d'exception indépendamment?Comment attraper des exceptions avec la plate-forme Qt indépendamment?
try{
std::string ts("9999-99-99 99:99:99.999");
ptime t(time_from_string(ts))
}
catch(...)
{
// doesn't work on windows
}
ÉDITÉE: Si quelqu'un ne comprend pas, j'ai écrit un autre exemple:
Qt fichier pro:
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();
}
Qu'est-ce que cela a à voir avec Qt? Vous n'utilisez aucune classe Qt dans votre code. –
L'erreur est réelle dans Qt. Ce code fonctionne bien sauf Qt-windows-gui, car, je pense, il relance les exceptions C++ std comme SEH, donc l'application tombe (catch ne fonctionne pas). – hoxnox
Je ne vois pas non plus comment cela a à voir avec Qt. Vous avez un code local non-Qt qui lance une exception, et un try catch-block autour de cela. Aussi attraper (...) devrait tout attraper. Le seul problème avec Qt serait que l'exception se retrouve dans la boucle d'événements Qt, ce qui n'est pas le cas ici. Et qu'est-ce que SEH? –