2009-12-23 30 views
9

Podczas korzystania z pliku QFileDialog w celu zapisania pliku i określenia rozszerzenia (np. * .pdf), a użytkownik wpisuje nazwę bez tego rozszerzenia, również zapisany plik nie ma tego rozszerzenia.
Przykład-Code:QFileDialog: automatyczne dodawanie rozszerzenia podczas zapisywania pliku?

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

teraz, gdy użytkownik wpisze "foo" jako nazwy, plik zostanie zapisany jako "foo", a nie jako "foo.pdf". Tak więc QFileDialog nie dodaje automatycznie rozszerzenia. Moje pytanie: Jak mogę to zmienić?

+1

dokumentacji Qt jest jasne i wyczerpujące, zastanawiam się, jak można ewentualnie pominięcia QFileDialog :: setDefaultSuffix() –

+1

Wygląda na to wiele prac tylko zrobić to samo jako: QFileDialog :: GetSaveFileName(). Czy coś mi brakuje? –

+3

@Julien L .: Zwykle staram się odpowiedzieć na pytanie, nie kwestionować potrzeby, szczególnie w przypadku prostych zapytań takich jak ten. Gdyby jednak OP otworzył stronę, do której się przyłączyłem i szukał "rozszerzenia", znalazłby tylko przykład dla "setNameFilter" i nic więcej, oprócz domyślnych sufiksów. –

Odpowiedz

17

Można użyć QFileDialog::setDefaultSuffix():

Ta nieruchomość posiada przyrostek dodawany do nazwy pliku, jeśli żaden inny przyrostek został określony.

Ta właściwość określa ciąg znaków, który zostanie dodany do nazwy pliku, jeśli nie ma już sufiksu. Sufiks jest zwykle używany do wskazania typu pliku (np. "Txt" oznacza plik tekstowy).

+3

Jak to zrobić, gdy jest dozwolone wiele typów plików? np. "Wszystkie pliki (* .pdf * .txt);; Pliki PDF (*. pdf)" i użytkownik wybrał drugi wpis, pliki PDF? – manatttta

+1

@manatttta Chociaż nie jest to banalnie proste, powinna istnieć możliwość podklasy 'QFileDialog', podłączyć sygnał' filterSelected() 'do slotu, który przeszukuje ciąg filtru dla pierwszego rozszerzenia pliku, a następnie wywołuje' setDefaultSuffix() 'z nim . –