2010-04-09 36 views
7

Sadece bir dosyayı kaydetmeye çalışıyorum. Ancak, otomatik olarak bir varsayılan son eki (setDefaultSuffix() yapar) almak için son ek olmadan girilen bir dosya adına ihtiyacım var.Qt QFileDialog - yalnızca statik işlevlerle yerel diyaloglar?

Doğrusu tamamen bunun için yerli tasarruf iletişim Sadece kaybetmek istemem. exec() QDialog'dan aşırı yüklenmez, bu yüzden tamamen yerel kancası atlar (DontUseNativeDialog seçeneğinin yok sayılması bile dikkate alınmaz).

Dosya üzerine yazma uyarısını devre dışı bırakırsam ve işlev sonlandırıldıktan sonra varsayılan son eki kendim eklerse, kullanıcı üzerine yazmak istemediyse iletişim kutusunu yeniden açardım ... ve bu çok çirkin.

ben yakalamak ve hızlı bir şekilde o orada değilse varsayılan ekini enjekte bazı sinyal var mı? Tahmin etmiyorum, çünkü yerel bir diyalog.

Ben filtreli yanlış yapıyorum bir şey var mı? Sadece bir filtre seçeneğim var. Bu uzantıyı kullanmalı.

Bu oldukça gevşek görünüyor. Kaydetme diyaloğunu başlatmak ve sadece "test" yazarak, hiçbir zaman uzantısız bir dosyaya neden olmamalıdır. "test", evet. "Test" yolu yok. Bu, kullanıcıları Yük düğmesine bastıkları zaman gerçekten şaşırır ve kaydettikleri dosyayı göremez.

Ben Qt çapraz platform kısmı bana en düşük ortak payda dosya iletişim işlevselliği veriyor galiba?

cevap

5

Evet, Qt kaynak koduna bakarsanız, yalnızca statik işlevlerin yerel dosya diyaloglarını kullandığı açıktır. Yerel diyalogları başka yollarla elde etmek mümkün değil, maalesef ...

0

Filtre işlevlerini statik işlevlerde denediniz mi? [Düzenleme:. Üzgünüz, zaten sahip olduğunu fark]

Sadece bu kendim denedim örneğin, ve işler oldukça makul görünmektedir:

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

kaydetmek iletişim getiri yılında testini Girme test.txt.
testini girme. Kaydet iletişim kutusundaki, test..txt değerini döndürür.
kaydetmek iletişim getiri test.foo yılında test.foo girme. zaten bu adla varolan bir dosya varsa

Bunların hepsi

uygun yazma iletişim göstermek. Veya ilk * girerek

herhangi eksiz, testi tek yolu, tırnak çevresindeki gereğidir ("test"). * (tüm dosyaları görüntülemek yapacak) ve daha sonra testine testini girerek. (Bir tuhaflık olsa bile, selectedFilter hala kullanılmasa bile iletişim kutusunda gösterilen filtreyi içerecektir).

+0

Belki de bir platform meselesi. Yerel diyaloğum GTK (GNOME/Linux), seninki nedir? – darron

+0

Mine, Windows. Tahminimce muhtemelen farkın olduğu yer. – richardwb

İlgili konular