IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Fermer une fenêtre dans un catch()


Sujet :

Qt

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 51
    Points : 46
    Points
    46
    Par défaut Fermer une fenêtre dans un catch()
    Bonsoir,
    Je suis actuellement en train de coder une classe qui nécessite la réussite du parsage d'un fichier avant de se lancer. Voici ce qui constitue le constructeur de ma classe étant une fenêtre dérivant de QWidget :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    try
        {
            m_parser.loadFile(path);
        }
        catch (FileError& e)
        {
            QMessageBox::critical(this, tr("Error while loading file"), tr("The specified file can't be opened."));
            close();
        }
        catch (ParserError& e)
        {
            QMessageBox::critical(this, tr("Error while parsing file"), tr("The specified file can't be parsed."));
            close();
        }
    Cependant quand je provoque une erreur pour tester l’efficacité du code, j'ai bien le message d'erreur correspondant mais la fenêtre s'ouvre quand même !

    A quoi cela est-il du et comment le régler ?
    Merci d'avance pour votre aide,
    darkrojo

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 111
    Points : 195
    Points
    195
    Par défaut
    Bonjour,
    votre close() dans le constructeur doit retourner false, il est ignoré.

    il faut déplacer le test dans un slot que vous appelez juste après le constructeur.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 51
    Points : 46
    Points
    46
    Par défaut
    Bonjour,
    Je n'ai pas totalement compris votre réponse, je me sert des slots uniquement pour les actions sur les fenêtres.

    Voilà ce que j'ai essayé, j'ai remplacé mon précedent code par ceci dans le constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QString path = QFileDialog::getOpenFileName(0, tr("Open WifiMasta file"), QDir::homePath(), QObject::tr("XML files (*.xml)"));
     
        loadFile(path);
    Et ici la fonction loadFile séparée du constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    void ManagerWindow::loadFile(const QString& path)
    {
        try
        {
            m_parser.loadFile(path);
        }
        catch (FileError& e)
        {
            QMessageBox::critical(this, tr("Error while loading file"), tr("The specified file can't be opened."));
            close();
        }
        catch (ParseError& e)
        {
            QMessageBox::critical(this, tr("Error while parsing file"), tr("The specified file can't be parsed."));
            close();
        }
    }
    Déclarée en tant que méthode privée.

    Pourriez vous me donner un quelconque exemple ? Je n'ai vu comment travailler avec les slots que pour les actions graphiques.

    Merci d'avance,
    darkrojo.

    EDIT : En fait ce que je voudrais faire c'est faire la vérification AVANT que la fenêtre s'ouvre mais je ne peux pas mettre de tr("blabla") dans le main...
    EDIT2 : Il fallait utiliser QObject::tr("blabla") dans le main

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 23
    Points : 23
    Points
    23
    Par défaut
    Tu appelles close depuis le constructeur?

    Tu peux essayer de temporiser la fermeture de ta fenêtre en utilisant un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QTimer::singleShot(0, this, SLOT(close()));
    de manière à être certain que la construction et l'initialisation sont complètement terminées avant de penser à fermer cette fenêtre.

    Mais en général, il vaut mieux séparer les données de l'interface.

    Pourquoi ne pas anticiper le chargement de ton fichier, et n'ouvrir la fenêtre que s'il a réussi?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 51
    Points : 46
    Points
    46
    Par défaut
    C'est ce que j'ai précisé dans mes deux EDIT : j'effectue les vérifications dans le main et je passe le Parser chargé à la fenêtre si tout se passe bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fermer une fenêtre DOS dans une application MFC
    Par Jahjouh dans le forum Visual C++
    Réponses: 4
    Dernier message: 19/01/2007, 14h29
  2. Comment fermer une fenêtre Child dans une application MDI
    Par bahiatoon dans le forum C++Builder
    Réponses: 9
    Dernier message: 05/10/2006, 08h57
  3. Fermer une fenêtre depuis une autre...
    Par nicolb dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/03/2005, 10h22
  4. Comment fermer une fenêtre quand la souris et clavier sont inactifs ?
    Par Goldenkiller dans le forum Composants VCL
    Réponses: 7
    Dernier message: 06/12/2004, 22h09
  5. Fermer une fenêtre au bout d'un certain temps.
    Par cprogil dans le forum Composants VCL
    Réponses: 5
    Dernier message: 27/11/2003, 18h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo