Qt QFileDialog - les boîtes de dialogue natives uniquement avec des fonctions statiques?

StackOverflow https://stackoverflow.com/questions/2609119

  •  25-09-2019
  •  | 
  •  

Question

Je suis en train d'enregistrer simplement un fichier. Cependant, je besoin d'un nom de fichier entré sans suffixe pour obtenir automatiquement un suffixe par défaut (qui setDefaultSuffix () fait).

Je perdrais plutôt pas complètement le natif de dialogue d'enregistrement juste pour cela. exec () ne soit pas surchargé de QDialog, il contourne complètement le crochet natif (en ignorant l'option DontUseNativeDialog même si elle est fausse).

Si je désactive l'avertissement de l'écrasement des fichiers et ajouter le suffixe par défaut moi-même après le retour de la fonction, je serais rouvrant la boîte de dialogue si l'utilisateur ne veut pas écraser ... et qui est juste laid.

Y at-il quelque signal que je peux attraper et injecter rapidement le suffixe par défaut si ce n'est pas là? Je devine pas, car il est une boîte de dialogue native.

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

Cela semble assez boiteux. Lancement de la boîte de dialogue doit enregistrer et simplement taper « test » jamais aboutir à un fichier sans extension. "Test"., Oui. aucun moyen « test ». Ça va vraiment perplexe les utilisateurs quand ils ont frappé la charge et ne peut pas voir le fichier qu'ils venez d'enregistrer.

Je suppose que la partie multi-plateforme de Qt me donne la fonctionnalité de dialogue de fichier plus petit dénominateur commun?

Était-ce utile?

La solution

Oui, si vous regardez le code source Qt, il est évident que seules les fonctions statiques utilise des boîtes de dialogue de fichiers natifs. Il est impossible d'obtenir des boîtes de dialogue natives d'une autre façon, malheureusement ...

Autres conseils

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 test dans la boîte de dialogue enregistrer les retours test.txt .
Saisie test. dans la boîte de dialogue enregistrer les retours test..txt .
Saisie test.foo dans la boîte de dialogue enregistrer les retours test.foo .

Ces tous montrent la boîte de dialogue Ecraser appropriée s'il y a déjà un fichier existant avec ce nom.

La seule façon que je peux obtenir test , 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 . (Même si l'on bizarrerie est que selectedFilter contiendra encore le filtre indiqué dans la boîte de dialogue, même si elle ne l'utilise pas).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top