2010-04-09 10 views
7

Tôi đang cố lưu một tệp. Tuy nhiên, tôi cần một tên tệp được nhập mà không có hậu tố để tự động nhận hậu tố mặc định (setDefaultSuffix() nào).Qt QFileDialog - hộp thoại riêng chỉ với các chức năng tĩnh?

Tôi không muốn mất hoàn toàn hộp thoại lưu gốc chỉ dành cho điều này. exec() không bị quá tải từ QDialog, vì vậy nó hoàn toàn bỏ qua hook gốc (bỏ qua tùy chọn DontUseNativeDialog ngay cả khi nó sai).

Nếu tôi tắt tệp ghi đè cảnh báo và tự thêm hậu tố mặc định sau khi hàm trả về, thì tôi sẽ mở lại hộp thoại nếu người dùng không muốn ghi đè ... và điều đó thật xấu xí.

Có một số tín hiệu tôi có thể nắm bắt và bơm nhanh hậu tố mặc định nếu nó không có ở đó không? Tôi đoán không, vì nó là một hộp thoại bản địa.

Có điều gì đó tôi đang làm sai với bộ lọc không? Tôi chỉ có một lựa chọn bộ lọc. Nó nên sử dụng phần mở rộng đó.

Điều này có vẻ khá lame. Việc khởi chạy hộp thoại lưu và chỉ cần gõ "test" sẽ không bao giờ dẫn đến một tập tin mở rộng. "thử nghiệm", vâng. "thử nghiệm" không có cách nào. Điều đó sẽ thực sự gây nhầm lẫn cho người dùng khi họ nhấn Tải và không thể xem tệp họ vừa lưu.

Tôi đoán phần đa nền tảng của Qt đang cho tôi chức năng thoại mẫu số chung nhỏ nhất?

Trả lời

5

Có, nếu bạn nhìn vào mã nguồn Qt, điều hiển nhiên là chỉ có các hàm tĩnh sử dụng các hộp thoại tệp gốc. Không thể có các hộp thoại gốc theo bất kỳ cách nào khác, thật không may ...

0

Bạn đã thử các tùy chọn bộ lọc trong các chức năng tĩnh chưa? [Edit:. Rất tiếc, nhận thấy rằng bạn đã có]

Tôi chỉ cố gắng này bản thân mình, ví dụ, và những thứ dường như là khá hợp lý:

QString filter = "Text files (*.txt)"; 
QString selectedFilter; 
QString filename = QFileDialog::getSaveFileName(0, "", "", filter, &selectedFilter); 

Bước kiểm tra trong lưu lợi nhuận thoại test.txt.
Nhập bài kiểm tra . trong hộp thoại lưu trả về test..txt.
Nhập kiểm tra.foo trong hộp thoại lưu trả về test.foo.

Tất cả đều hiển thị hộp thoại ghi đè phù hợp nếu đã có tệp hiện có với tên đó.

Cách duy nhất tôi có thể nhận kiểm tra, mà không cần bất kỳ hậu tố, là bởi xung quanh nó với dấu ngoặc kép ("test"), hoặc bằng cách đầu tiên bước vào *. * (mà sẽ làm cho nó hiển thị tất cả các file) và sau đó nhập kiểm tra. (Mặc dù một điều kỳ lạ là selectedFilter sẽ vẫn chứa bộ lọc được hiển thị trong hộp thoại, ngay cả khi nó không được sử dụng).

+0

Có thể đó là một điều nền tảng. Hộp thoại riêng của tôi là GTK (GNOME/Linux), của bạn là gì? – darron

+0

Mỏ là Windows. Đoán đó có lẽ là nơi sự khác biệt nằm. – richardwb