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.
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.
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
Partager