J'utilise le Le Code que j'utilise pour ouvrir la boîte de dialogue du fichier est: p> J'utilise QT 5.5 avec Visual Studio 2013. P> P> qfiledialog :: getopenfilenameame code> pour obtenir un fichier à ouvrir. Toutefois, sur l'ordinateur d'un client exécutant Windows 7, cela affiche une boîte de dialogue de fichier ouverte corrompue, comme indiqué dans la capture d'écran ou bloque toute l'application.
3 Réponses :
Je suppose qu'il y a un problème avec le répertoire. Cette chaîne vide fournie comme chemin pourrait être problématique.
Essayez de résoudre ce problème de cette façon:
Acclamations! J'ai envoyé au client une application avec ces deux tester. Si ce n'est pas ceci, je suppose que c'est probablement une extension de shell dodgy comme certains des commentaires suggèrent.
Pas de chance Malheureusement, j'ai essayé des variantes sans argument, une version de construction par défaut et un répertoire existant pour le même résultat. Merci quand même!
Pouvez-vous fournir une pile d'appels de crash? C'est plus facile que vous construisiez vous-même QT.
La racine de votre problème semble être une corruption de la mémoire. Pour le trouver, installez Verificateur d'application Microsoft Code> et configurez votre application avec Basics \ tas code>. Vous pouvez le faire sur votre propre ordinateur, même si le problème initial n'a pas reproduit. Après cela, essayez de reproduire le problème et je suppose que vous trouverez votre corruption de mémoire. P>
Maintenant que le problème ne se reproduisait pas sur votre machine et que vous dites que la boîte de dialogue est suspendue, je suggère les étapes supplémentaires suivantes (vous pouvez tout faire vous-même dans une session TeamViewer pour faciliter la tâche) P>
A donné un coup de feu, pas de chance malheureusement.
Je vous suggère de demander à votre client des actions précises qu'il effectue. Pour la corruption de la mémoire, un débordement tampon est assez typique. C'est-à-dire que quelque chose peut être plus grand que vous attendiez.
J'ai envoyé au client un programme minimal qui a seulement ouvert une boîte de dialogue de fichiers (rien d'autre), et il a toujours présenté le problème.
Je pense que j'avais une bonne extension de Shell sur la machine du client, puis. Si vous êtes toujours intéressé à trouver la racine de ce problème, je peux fournir des étapes de dépannage avancées, impliquant la capture d'un minidump avec la traçage du tas.
Acclamations! J'ai effectivement intégré un journaliste de crash dans l'application qui m'envoie un minidup. Malheureusement, le dialogue semble juste suspendre et ne s'est pas écrasé récemment cependant :(
Avez-vous résolu le problème? Si oui, veuillez le décrire pour les futurs lecteurs.
Pas encore, malheureusement. Je visitant le site du client la semaine prochaine, donc si je peux résoudre ce problème, cela publiera des détails.
Le problème dans ce cas particulier a fini par être une incompatibilité entre QT et le logiciel de sauvegarde Dell et de récupération installés sur l'ordinateur du client, comprenant une extension de shell incompatible. La solution que j'ai utilisée consistait à supprimer le logiciel de sauvegarde et de récupération, mais cela ressemble à la nom de nom de noms QT est également une alternative. Plus d'informations sont disponibles dans Qtbug-41416 . P>
Est-ce que cela se produit avec
getopenfilename code>,grevefilename code> ou les deux?Essayez dans la construction de débogage, vous manquez probablement des dlls en libération.
@Mailerdaimon Cela arrive pour les deux.
Avez-vous essayé sur votre PC comme application autonome (non démarré de Visual Studio)?
@MailerDaimon Cela fonctionne bien sur mon ordinateur, c'est une application distribuée autonome sur l'ordinateur d'un client. Je ne peux pas me reproduire moi-même malheureusement.
Je ne connais rien à propos de Qt, mais dans Win32, vous devez appeler Coinitialize () ou Oleinitialize () pour utiliser les dialogues de fichiers communs. Peut-être qu'il y a une méthode init qui a été manquée?
Comme @jonathanpotter, je reçois le sentiment que ce n'est pas spécifique à QT. Regardez ce forum ( superutilisateur.com/questions/378296/... ). Il n'y a aucun moyen d'être sûr, mais un gel en raison d'une extension de shell qui serait installée uniquement sur le PC de ce client spécifique semble correspondre à la photo.
@Danielstrul Merci pour l'idée intéressante! J'aurai accès à l'ordinateur du client dans quelques semaines et j'essaierai de voir s'il s'agit du problème. Malheureusement, je ne peux probablement pas trouver jusque-là.
@ajshort 'J'espère que cela aide! Pour l'enregistrement, voici la recherche Google que j'ai utilisée pour trouver cette solution possible ( Google .com / Rechercher? Q = OpenFileDialog + Hangs & TBM = ISCH ) -> Il permet de rechercher toutes les images étiquetées "OpenFileDialog Hocps". Chaque fois qu'il y a une casquette d'écran qui ressemble exactement à la vôtre, c'est un candidat potentiel. Bonne chance!
Juste une suppose - mais pouvez-vous essayer initialisation du répertoire de démarrage b> à - dire: c :? La raison pour laquelle je demande est double - il peut s'agir de Windows d'essayer de reprendre dans "un endroit précédent" qui est maintenant invalide, ou peut être un bogue de niveau QT qui gère Win32 / Win64 de manière incorrecte. Veuillez enregistrer un bogue avec QT si vous constatez que cela fonctionne :)
Considérez: Stackoverflow. com / questions / 25270513 / ...