2010-04-09 26 views
7

J'essaie simplement de sauvegarder un fichier. Cependant, j'ai besoin d'un nom de fichier entré sans suffixe pour obtenir automatiquement un suffixe par défaut (que fait setDefaultSuffix()).Qt QFileDialog - dialogues natifs uniquement avec des fonctions statiques?

Je préfère ne pas complètement perdre la boîte de dialogue de sauvegarde natif juste pour cela. exec() n'est pas surchargé à partir de QDialog, donc il contourne totalement le hook natif (en ignorant l'option DontUseNativeDialog même si elle est fausse).

Si je désactive l'avertissement d'écrasement de fichier et que j'ajoute le suffixe par défaut après le retour de la fonction, alors je rouvrirais la boîte de dialogue si l'utilisateur ne voulait pas écraser ... et c'est juste moche.

Y at-il un signal que je peux attraper et injecter rapidement le suffixe par défaut si ce n'est pas là? Je ne devine pas, puisque c'est un dialogue natif.

Y at-il quelque chose que je fais mal avec le filtre? Je n'ai qu'un seul choix de filtre. Il devrait utiliser cette extension.

Cela semble assez boiteux. Lancer la boîte de dialogue de sauvegarde et simplement taper "test" ne devrait jamais aboutir à un fichier sans extension. "test", oui. "test" pas moyen. Cela va vraiment dérouter les utilisateurs lorsqu'ils cliquent sur Charger et ne peuvent pas voir le fichier qu'ils viennent d'enregistrer.

Je suppose que la partie multiplateforme de Qt me donne la plus petite fonctionnalité de dialogue de fichier de dénominateur commun?

Répondre

5

Oui, si vous regardez le code source Qt, il est évident que seules les fonctions statiques utilisent des boîtes de dialogue de fichiers natifs. Il n'est pas possible d'obtenir des dialogues natifs autrement, malheureusement ...

0

Avez-vous essayé les options de filtrage dans les fonctions statiques? [Edit:. Oops, remarqué que vous avez déjà]

Je viens d'essayer moi-même, par exemple, et les choses semblent être assez raisonnable:

QString filter = "Text files (*.txt)"; 
QString selectedFilter; 
QString filename = QFileDialog::getSaveFileName(0, "", "", filter, &selectedFilter); 

Saisie essai dans les économies des retours de dialogue test.txt.
Saisie du test . dans la boîte de dialogue de sauvegarde renvoie test..txt.
La saisie test.foo dans la boîte de dialogue de sauvegarde renvoie test.foo.

Elles affichent toutes la boîte de dialogue d'écrasement appropriée s'il existe déjà un fichier portant ce nom.

La seule façon que je peux obtenir essai, sans suffixes, est en l'entourant avec des guillemets (« test »), ou en entrant d'abord *. * (ce qui en fera afficher tous les fichiers) puis en entrant test. (Bien qu'il soit bizarre que selectedFilter contienne toujours le filtre affiché dans la boîte de dialogue, même s'il n'est pas utilisé).

+0

Peut-être que c'est une plate-forme. Ma boîte de dialogue native est GTK (GNOME/Linux), quelle est la tienne? – darron

+0

Le mien est Windows. Je suppose que c'est probablement là que réside la différence. – richardwb