2009-12-23 25 views
9

Lorsque vous utilisez un QFileDialog pour enregistrer un fichier et spécifier l'extension (comme * .pdf) et que l'utilisateur tape un nom sans cette extension, le fichier enregistré n'a pas cette extension.
Exemple-Code:QFileDialog: ajout automatique de l'extension lors de la sauvegarde du fichier?

QFileDialog fileDialog(this, "Choose file to save"); 
fileDialog.setNameFilter("PDF-Files (*.pdf)"); 
fileDialog.exec(); 
QFile pdfFile(fileDialog.selectedFiles().first()); 

maintenant lorsque l'utilisateur entre « foo » comme nom, le fichier sera enregistré en tant que « foo », pas « toto.pdf ». Donc, le QFileDialog n'ajoute pas l'extension automatiquement. Ma question: Comment puis-je changer cela?

+1

documentation Qt est claire et complète, je me demande comment avez-vous pu avoir manqué QFileDialog :: setDefaultSuffix() –

+1

On dirait beaucoup d'œuvres juste pour faire la même chose que: QFileDialog :: getSaveFileName(). Quelque chose me manque? –

+3

@Julien L .: Habituellement, j'essaie de répondre à la question, pas question du besoin, surtout pour de simples requêtes comme celle-ci. Cependant, si le PO aurait ouvert la page à laquelle j'ai lié et recherché "extension", il n'aurait trouvé que l'exemple pour "setNameFilter", et rien d'autre ne serait lié aux suffixes par défaut. –

Répondre

17

Vous pouvez utiliser QFileDialog::setDefaultSuffix():

Cette propriété contient le suffixe ajouté au nom du fichier si aucun autre suffixe n'a été spécifié.

Cette propriété spécifie une chaîne qui sera ajoutée au nom de fichier si elle n'a pas déjà de suffixe. Le suffixe est généralement utilisé pour indiquer le type de fichier (par exemple "txt" indique un fichier texte).

+3

Comment cela peut-il être fait quand plusieurs types de fichiers sont autorisés? par exemple, "All-Files (* .pdf * .txt) ;; PDF-Files (*. pdf)" et l'utilisateur a sélectionné la deuxième entrée, PDF-Files? – manatttta

+1

@manatttta Bien qu'il ne soit pas vraiment trivial, il devrait être possible de sous-classer 'QFileDialog', de connecter le signal' filterSelected() 'à un emplacement qui recherche la chaîne de filtrage pour la première extension de fichier, puis appelle' setDefaultSuffix() ' . –