2009-12-23 32 views
9

Khi sử dụng QFileDialog để lưu tệp và chỉ định tiện ích mở rộng (như * .pdf) và người dùng nhập tên không có tiện ích mở rộng này, thì tệp đã lưu không có tiện ích mở rộng này.
Ví dụ-Code:QFileDialog: tự động thêm tiện ích khi lưu tệp?

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

bây giờ khi người dùng nhập vào "foo" như tên gọi, các tập tin sẽ được lưu dưới dạng "foo", chứ không phải là "foo.pdf". Vì vậy, QFileDialog không tự động thêm tiện ích. Câu hỏi của tôi: Làm thế nào tôi có thể thay đổi điều này?

+1

Qt tài liệu hướng dẫn rõ ràng và toàn diện, tôi đang tự hỏi làm thế nào mà bạn có thể đã bỏ lỡ QFileDialog :: setDefaultSuffix() –

+1

Hình như rất nhiều công trình chỉ để làm tương tự như: QFileDialog :: getSaveFileName(). Tôi có bỏ lỡ điều gì đó không? –

+3

@ Julien L .: Tôi thường cố gắng trả lời câu hỏi, không đặt câu hỏi về nhu cầu, đặc biệt là đối với các truy vấn đơn giản như thế này. Tuy nhiên, nếu OP đã mở trang tôi liên kết và tìm kiếm "mở rộng", anh ta sẽ chỉ tìm thấy ví dụ cho "setNameFilter" và không có gì khác liên quan đến hậu tố mặc định. –

Trả lời

17

Bạn có thể sử dụng QFileDialog::setDefaultSuffix():

Thuộc tính này chứa hậu tố thêm vào tên tập tin nếu không có hậu tố khác đã được chỉ định.

Thuộc tính này chỉ định chuỗi sẽ được thêm vào tên tệp nếu nó chưa có hậu tố. Hậu tố thường được sử dụng để cho biết loại tệp (ví dụ: "txt" biểu thị tệp văn bản).

+3

Làm thế nào điều này có thể được thực hiện khi có nhiều loại tệp được phép? ví dụ: "Tất cả các tệp (* .pdf * .txt) ;; Tệp PDF (*. pdf)" và người dùng chọn mục nhập thứ hai, tệp PDF? – manatttta

+1

@manatttta Trong khi không chính xác tầm thường, có thể phân lớp 'QFileDialog', kết nối tín hiệu' filterSelected() 'với một khe tìm kiếm chuỗi bộ lọc cho phần mở rộng tệp đầu tiên, và sau đó gọi' setDefaultSuffix() 'với nó . –

Các vấn đề liên quan