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

Discussion :

[Windows] Crash lors de l'utilisation de QFileDialog

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 29
    Par défaut [Windows] Crash lors de l'utilisation de QFileDialog
    Bonjour,

    J'essaye de créer un dialogue de sélection de fichier en utilisant QFileDialog, ce dialogue doit s'ouvrir suite au click sur un bouton.

    Au niveau de la compilation je n'ai aucune erreur, ni aucun avertissement, cependant lors de l'exécution, dès que je click sur mon bouton devant afficher le dialogue l'application complète crash.

    Voici le bout de code incriminé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QFileDialog::getOpenFileNames(this,"Fichier a ouvrir","c:\\");
    J'ai bien entendu ajouter en début de mon fichier l'inclusion de QFileDialog via:

    J'ai un peut chercher sur le net les différentes facons de créer un dialogue de sélection de fichier avec QFileDialog, mais à chaque fois même problème, mon appli crash :/

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 275
    Par défaut prob QFileDialog
    Le crash est en général du à l'accès à un pointeur NULL.

    Tu dis que ça plante lors du clic sur ton bouton, est-tu sûr que ça vient du getOpenFileNames et pas plutôt de l'utilisation du résultat ? Si ton résultat est NULL mais que tu l'utilise ça crashe.

    Je ne sais pas si tu débutes ou pas, si tu débutes commente tout le reste de ta fonction pour voir si le getOpenFileNames ne fait pas crasher ton appli. Si tu débutes pas tu l'as déjà probablement fait.
    getOpenFileNames retourne une QStringList. Il faut tester si celle-ci est vide, c'est peut être là que ça coince pour toi.

    Je peux te donner un exemple d'ouverture de fichier avec getOpenFileName assez proche, une fois que tu arrive à sélectionner un fichier, tu pourra en sélectionner plusieurs.

    Voici l'exemple de sélection et d'ouverture d'un fichier XML. A la limite part de ça et adapte à tes besoins en ne changeant qu'un élément à chaque fois comme ça si ça crashe c'est ta dernière modif qui est en cause et se sera plus facile de trouver le prob.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    QSring filename;
    filename=QFileDialog::getOpenFileName(this,"Ouverture fichier",QString(),"");
    QFile fichier(filename);
    if (fichier.open(QIODevice::ReadOnly))
    {
      QDomDocument docxml("test");
      docxml.setContent(&fichier);
    }
    Là je récupère directement le contenu du fichier dans une structure QDomDocument. De façon plus générique, tu peux utiliser read, readData selon tes besoin pour lire le contenu du fichier

    Je ne filtre pas les fichiers présents dans le dossier et ne sélectionne pas de dossier spécifique, c'est donc simple. Tu peux partir de la pour voir si ça fonctionne sans spécifier de dossier de départ ni de type de fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filename=QFileDialog::getOpenFileName(this,"Ouverture fichier");
    aurait donc suffit. Dans cet exemple je peux mettre le chemin à la place du QString() et ce que je souhaite filtrer à la place de ""

    Tu as un exemple de sélection et d’ouverture d'1 fichier opérationnel.

    Pour résumer ton prob vient probablement de l'utilisation du résultat du retour de getOpenFileNames

    J'ai pensé à autre chose ne serait-ce pas "c:\\" qui poserai problème ? Je développe sous Linux, si c'est pas "c:\\" c’est peut-être "c:/". autre chose, tu n'a peut être pas le droit d'accéder à c:\ Pour tester ça iol te suffit de lancer ton appli en mode administrateur, si ça plante pas c'est ça

    Bon courage
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 81
    Par défaut
    Bonjour,
    Déja pour profiter de la portabilité de Qt je te propose de ne pas mettre "C:\\" dans le code, QDir::rootPath() te retourne le chemin vers "C:" sous windows et "File System " sous Linux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QString str = QFileDialog::getOpenFileName(this, "Open",QDir::rootPath(),"XML(*.xml)");

Discussions similaires

  1. Crash lors de l'utilisation de setModal()
    Par alpha_one_x86 dans le forum Qt
    Réponses: 1
    Dernier message: 08/02/2012, 09h47
  2. dosemu crash lors de l'utilisation d'un logiciel
    Par olivier131313 dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 21/06/2010, 11h44
  3. Crash lors de l'utilisation des VBO
    Par Julien Bodin dans le forum OpenGL
    Réponses: 0
    Dernier message: 03/03/2009, 21h54
  4. [Windows 2003 Server] Problème d'utilisation du CPU
    Par Quentin dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 11/04/2005, 11h26
  5. DLL Borland chargée par Windows: crash
    Par bocher dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/01/2004, 12h09

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