2010-07-04 9 views
6

खैर मैं निम्नलिखित कोड का उपयोग कर रहा एक फ़ाइल रखने की ज़रूरत हो कि के लिए फ़ाइल नाम पाने के लिए ..QFileDialog का उपयोग करते समय मुझे कौन सा प्रत्यय उपयोगकर्ता चुना गया है, यह कैसे पता लगा सकता है?

QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),"/home/user/MyDocs/",tr("JPG files (*.jpg);;BMP files (*.bmp);;PNG files (*.png)")); 

मैं फ़ाइल स्वरूप के बारे में विकल्प की एक संख्या के साथ उपयोगकर्ता प्रदान कर रहा हूँ जो फ़ाइल में बचाया जाना है। हालांकि, लौटा QString केवल मुझे उपसर्ग फ़ाइल नाम देता है जिसे उपयोगकर्ता ने चुना है, प्रत्यय नहीं है और इस प्रकार मुझे नहीं पता कि उपयोगकर्ता ने कौन सी फ़ाइल प्रारूप चुना है। मैं ऐसे फ़ाइल प्रारूप का पता कैसे लगा सकता हूं?

उत्तर

2

this चर्चा पर एक नज़र डालें। यह में दर्ज की गई स्ट्रिंग पर QFileInfo का उपयोग करता है।

#define JPEG_FILES "JPG files (*.jpg)" 
#define BMP_FILES "BMP files (*.bmp)" 
#define PNG_FILES "PNG files (*.png)" 

QString selectedFilter; 
QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"), 
     "/home/user/MyDocs/", 
     JPEG_FILES ";;" BMP_FILES ";;" PNG_FILES, &selectedFilter); 

if (fileName.isNull()) 
    return; 
if (selectedFilter == JPEG_FILES) { 
    ... 
} else if (selectedFilter == BMP_FILES) { 
    ... 
} else if (selectedFilter == PNG_FILES) { 
    ... 
} else { 
    // something strange happened 
} 

संकलक तर्क में शाब्दिक तार जोड़ लिए ख्याल रखता है:

+0

निश्चित रूप से मुझे जवाब मिलने के बाद मैं यहां एक उत्तर स्वीकार करूँगा .. उह, यह भी काम नहीं कर रहा है .. QFileInfo केवल तभी काम करेगा जब स्ट्रिंग में पारित हो (अर्थात् आपके द्वारा लिंक किए गए उदाहरण में ' करने के लिए) एक फ़ाइल नाम है जिसमें पहले से ही प्रत्यय है .. उदाहरण के लिए, यदि स्ट्रिंग "file.ext" थी, तो प्रत्यय "ext" वापस आ जाएगा .. मेरी समस्या यह है कि पहले स्थान पर फ़ाइल नाम में प्रत्यय नहीं है यह .. यानी, मुझे प्राप्त फ़ाइल नाम "/ home/user/myDocs/filename" जैसा आ रहा है ... कोई प्रत्यय नहीं .. – Ahmad

1

आप मैं आमतौर पर इस तरह यह करने के 5 वीं वैकल्पिक स्ट्रिंग
उपयोग करने के लिए की जरूरत है।

मुझे यकीन नहीं है कि लौटाई गई स्ट्रिंग tr() के साथ कैसे इंटरैक्ट करती है। आपको परीक्षण करना होगा और पता लगाना होगा। शायद इसे गैर-अनुवाद करने की आवश्यकता है।
यह फ़ंक्शन अच्छा हो सकता है अगर फ़ंक्शन चयनित फ़िल्टर की अनुक्रमणिका लौटाएगा लेकिन हां, ऐसा नहीं है।

एक अच्छा समाधान फ़िल्टर को एक सूची में रखना होगा, इससे एक स्ट्रिंग बनाएं और फिर सूची में चयनित फ़िल्टर स्ट्रिंग को वापस लौटाएं। यह tr() समस्या को भी हल करेगा।

+0

मैंने अभी यह कोशिश की और यह मेरे लिए काम नहीं किया .. लौटने का चयन किया गया स्ट्रिंग खाली है .. – Ahmad

+0

@ अहमद: आप कहते हैं कि "चयनित स्ट्रिंग लौट रहा है" क्या आप यहां उदाहरण से 'चयनित फ़िल्टर' का परीक्षण कर रहे हैं या 'फ़ाइल नाम'? –

+0

यह वह कोड है जिसका मैं उपयोग कर रहा था: क्यूस्ट्रिंग एसएफ; क्यूस्ट्रिंग फ़ाइल नाम = QFileDialog :: getSaveFileName (यह, tr ("फ़ाइल सहेजें"), "/ home/user/MyDocs /", tr ("जेपीजी फाइलें (* .jpg); बीएमपी फाइलें (* .bmp) ;; पीएनजी फाइलें (* .png) "), &sf); एसएफ में उपर्युक्त दो लाइनों को निष्पादित करने के बाद कुछ भी शामिल नहीं है .. इसकी खाली .. – Ahmad

1

प्रश्न में कोड विंडोज (क्यूटी 4.6.2 और विन XP) में काम करता है। फ़ाइल नाम में चयनित एक्सटेंशन होता है। लेकिन आप स्पष्ट रूप से कुछ और Windows का उपयोग कर रहे हैं, तो आप इस समाधान की कोशिश कर सकते:

QFileDialog dialog(this, tr("Save as ..."), "/home/user/MyDocs/"); 
dialog.setAcceptMode(QFileDialog::AcceptSave); 
QStringList filters; 
filters << "JPG files (*.jpg)" << "BMP files (*.bmp)" << "PNG files (*.png)"; 
dialog.setNameFilters(filters); 
if (dialog.exec() == QDialog::Accepted) 
{ 
    QString selectedFilter = dialog.selectedNameFilter(); 
    QString fileName = dialog.selectedFiles()[0]; 
} 

here से एक slighty संशोधित कोड है।

+0

यह ओपीएस कोड के समान नहीं है। यह प्लेटफ़ॉर्म फ़ाइल संवाद के बजाय QTs फ़ाइल संवाद खोलता है। – shoosh

+0

इस उदाहरण के लिए धन्यवाद। यह मेरे मुद्दे का जवाब था ... लेकिन मेरे पास थोड़ा अनुवर्ती प्रश्न है। Dialog.selectedNameFilter() "कुछ (* .ext)" वापस आ जाएगा, क्या सिर्फ .ext प्राप्त करने का कोई तरीका है? तो अगर मैं उपयोगकर्ता नहीं करता तो मैं इसे फ़ाइल में जोड़ सकता हूं? – Dariusz

संबंधित मुद्दे

 संबंधित मुद्दे