je l'action suivante qui est exécutée quand un certain bouton est enfoncé dans une application Qt:Gestion des exceptions dans Qt Script avec C++?
#include <shape.h>
void computeOperations()
{
polynomial_t p1("x^2-x*y+1"),p2("x^2+2*y-1");
BoundingBox bx(-4.01, 4.01,-6.01,6.01,-6.01,6.01);
Topology3d g(bx);
AlgebraicCurve* cv= new AlgebraicCurve(p1,p2);
g.push_back(cv);
g.run();
//Other operations on g.
}
Topology3d (...), AlgebraicCurve (..), BoundingBox (...), polynomial_t (...) sont des types définis par l'utilisateur définis dans le fichier d'en-tête correspondant .
Maintenant, pour certaines valeurs de p1 et p2, la méthode g.run() fonctionne parfaitement.
Ainsi, pour d'autres valeurs de p1 et p2, g.run() il ne fonctionne plus que la méthode est bloqué en quelque sorte et le message « application ne répond pas » apparaît et je dois tuer l'application.
Je voudrais avoir le comportement suivant: chaque fois g.run() prend trop de temps, est bloqué pour certains particulier les valeurs de p1, p2, je voudrais afficher une boîte d'avertissement en utilisant QMessageBox :: Attention.
J'essaie de le faire avec try {...} et catch {...}:
#include <shape.h>
class topologyException : public std::runtime_error
{
public:
topologyException::topologyException(): std::runtime_error("topology fails") {}
};
void computeOperations()
{
try
{
polynomial_t p1("x^2-x*y+1"),p2("x^2+2*y-1");
BoundingBox bx(-4.01, 4.01,-6.01,6.01,-6.01,6.01);
Topology3d g(bx);
AlgebraicCurve* cv= new AlgebraicCurve(p1,p2);
g.push_back(cv);
g.run();
//other operations on g
throw topologyException();
}
catch(topologyException& topException)
{
QMessageBox errorBox;
errorBox.setIcon(QMessageBox::Warning);
errorBox.setText("The parameters are incorrect.");
errorBox.setInformativeText("Please insert another polynomial.");
errorBox.exec();
}
}
Ce code compile, mais quand il l'exécute vraiment ne implémente le comportement requis.
Pour les polynômes pour lesquels g.run() est bloqué le code de boîte de message d'erreur est jamais atteint, plus pour les polynômes pour lesquels g.run() fonctionne bien, le message d'erreur boîte code est encore atteint en quelque sorte et la boîte apparaît dans l'application .
Je suis nouveau à la gestion des exceptions, donc toute aide est plus que accueilli.
Je pense que le programme est bloqué quelque part dans g.run() donc il n'atteint pas l'exception, je ne comprends toujours pas ce qui se passe réellement.
Encore je voudrais jeter cette exception sans aller dans le code de g.run(), cette fonction est implémentée comme partie d'une bibliothèque plus grande, que je viens d'utiliser dans mon code. Puis-je avoir ce comportement dans mon programme sans mettre try {...} catch {...} instruction block dans la fonction g.run()?