2009-12-23 15 views
9

Quando si utilizza un QFileDialog per salvare un file e per specificare l'estensione (come * .pdf) e l'utente digita un nome senza questa estensione, anche il file salvato non ha questa estensione.
Esempio-Code:QFileDialog: aggiunta automatica dell'estensione al salvataggio del file?

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

ora, quando l'utente entra "foo", come il nome, il file verrà salvato come "foo", non come "prova.pdf". Quindi lo QFileDialog non aggiunge automaticamente l'estensione. La mia domanda: come posso cambiare questo?

+1

documentazione Qt è chiara e completa, mi chiedo come si potrebbe forse aver perso QFileDialog :: setDefaultSuffix() –

+1

Sembra un sacco di lavori solo per fare lo stesso: QFileDialog :: GetSaveFileName(). Mi manca qualcosa? –

+3

@ Julien L .: Di solito cerco di rispondere alla domanda, non di metterla in dubbio, soprattutto per domande semplici come questa. Tuttavia, se l'OP avesse aperto la pagina a cui ho collegato e cercato "estensione", avrebbe trovato solo l'esempio per "setNameFilter" e nient'altro relativo ai suffissi predefiniti. –

risposta

17

Si potrebbe utilizzare QFileDialog::setDefaultSuffix():

Questa struttura contiene il suffisso aggiunto al nome del file, se è stato specificato nessun altro suffisso.

Questa proprietà specifica una stringa che verrà aggiunto al nome del file se non ha già nessun suffisso. Il suffisso viene in genere utilizzato per indicare il tipo di file (ad esempio "txt" indica un file di testo).

+3

Come si può fare quando sono consentiti più tipi di file? ad es. "Tutti i file (* .pdf * .txt) ;; PDF-Files (*. pdf)" e l'utente ha selezionato la seconda voce, PDF-Files? – manatttta

+1

@manatttta Mentre non esattamente banale, dovrebbe essere possibile sottoclasse 'QFileDialog', collegare il)' 'segnale filterSelected (ad uno slot che cerca la stringa di filtro per la prima estensione di file, e poi chiama' setDefaultSuffix() 'con esso . –