2012-09-06 11 views
15

के भीतर से क्यूटी मानक आइकन का उपयोग मैं क्यूटी मानक आइकन (as here) का उपयोग करना चाहता हूं। मुझे कई उदाहरण मिल गए हैं कि set the icons programmatically (कोड में रनटाइम) कैसे करें।क्यूटी निर्माता

हालांकि, मैं कैसे क्यूटी निर्माता में "मानक आइकन का नाम" सेट कर सकते हैं (उदाहरण के लिए application-exit)? यह blog here कहता है, मैं विषय को संबंधित नाम पर बस सेट करता हूं। लेकिन मेरे पास ऐसी थीम प्रॉपर्टी नहीं है, मुझे संसाधन के साथ पॉपअप मिलेगा (नीचे स्क्रीनशॉट)।

"मानक नाम" (उदा। application-exit) लागू करने के लिए सही स्थान कहां है?

2.4.x से Qt निर्माता 2.5.2 तक अद्यतन मुझे उपरोक्त ब्लॉग से "विषय" संपत्ति देता है, लेकिन अभी तक कोई दृश्य आइकन नहीं है। आइकन को दृश्यमान बनाने के लिए और क्या आवश्यक है?

Theme now available with Creator 2.5.2

टिप्पणी क्यूटी 4.8.1, अब 2.5.2 के लिए अद्यतन, विंडोज 7

उत्तर

12

थीम आइकन केवल लिनक्स/एक्स 11 पर समर्थित हैं। विंडोज और ओएस एक्स पर, आपको अपने स्वयं के आइकन प्रदान करना होगा।

इस समस्या का समाधान QtCreator (जैसा कि आपके उदाहरण में) में विषय का नाम सेट करना है। फिर आपको अपने संसाधनों में उपसर्ग ":/आइकन" के तहत एक ही उपनाम के आइकन प्रदान करना होगा। आप सार्वजनिक डोमेन में उपलब्ध सेट से आइकन का लाभ उठा सकते हैं, उदा। लोकप्रिय टैंगो आइकन सेट।

यदि आप केवल विंडोज प्लेटफार्म को लक्षित करते हैं, तो थीम सेटिंग आपके लिए कोई उपयोग नहीं होगी। यदि आप लिनक्स/एक्स 11 और अन्य प्लेटफॉर्म दोनों को लक्षित करते हैं, तो इस समाधान के साथ आपको एक सिस्टम पर मूल आइकन मिलते हैं और आइकन जो आप दूसरों को प्रदान करते हैं।

आप इसे यहाँ कैसे करना है पर एक बहुत अच्छा स्पष्टीकरण पा सकते हैं: http://mithatkonar.com/wiki/doku.php/qt/icons

+1

अन्य ऑपरेटिंग सिस्टम में टूलबार पर उपयोग किए जाने वाले मानक आइकन का एक बड़ा बड़ा निकाय है, और इनके लिए आइकन थीम हैं। उदाहरण के लिए: http://commons.wikimedia.org/wiki/Tango_icons http://gnome-look.org/content/show.php/?content=122078 जैसा कि आप देख सकते हैं, यह एक बहुत अच्छी अवधारणा है क्योंकि सभी एप्लिकेशन जो इन मानक आइकनों का उपयोग किसी भी डेस्कटॉप वातावरण में अच्छी तरह से फिट है जो उपयोगकर्ता द्वारा अनुकूलन योग्य है। – ypnos

+0

कृपया ध्यान दें कि मेरी पिछली टिप्पणियां अब टिप्पणियों के जवाब दिए गए थे। गलतफहमी के लिए खेद है। – ypnos

0

दुर्भाग्य से, क्यूटी डिजाइनर के माध्यम से आइकन विषय के यह विकल्प नहीं Windows पर उपलब्ध है।

+0

क्या आपका मतलब है कि यह विंडोज के तहत काम नहीं कर रहा है? क्योंकि - ऊपर दिखाए गए स्क्रीनशॉट के रूप में - विषय सेट करना संभव है। मेरे लिए उपलब्ध नहीं होगा, विकल्प बिल्कुल उपलब्ध नहीं है। और क्या यह एक बग माना जाता है या यह क्यूटी टीम का एक डिजाइन निर्णय है? कोई और विवरण कुछ और विवरण दे रहा है? –

1

@ypnos समस्या को हल करने के लिए कई दृष्टिकोण के साथ एक महान लिंक का सुझाव दिया। मैं आखिरी एक - Creating a custom icon theme पसंद करता हूं। लेखक राज्यों तीन पेशेवरों (सभी प्लेटफार्मों लिए उपलब्ध है, बहुत बढ़िया आकार बदलने, कवर सभी आवश्यक प्रतीक), और दो विपक्ष (प्रणाली आइकन विषय के अनुरूप नहीं है, दर्द पिछवाड़े में लागू करने के लिए)। यहां मैं विपक्ष से छुटकारा पाने के लिए सुधार का सुझाव देता हूं।

मैंने जिथूब से टैंगो आइकनसेट को क्लोन किया है। रिपोजिटरी https://github.com/ppinard/qtango में पहले से ही index.theme फ़ाइल है। लेकिन मुख्य रूप से, यह एक पायथन स्क्रिप्ट generate_rcc.py लाता है, जो स्वचालित रूप से *.qrc फ़ाइल उत्पन्न कर सकता है। मुझे subprocess.check_call() के '--binary' और '--compress' से '-binary' और '-compress' से तर्कों को बदलना पड़ा। जेनरेट की गई फ़ाइल में पूर्ण पथ होते हैं, लेकिन & को ढूंढना आसान है। कोई भी इस स्क्रिप्ट का उपयोग किसी भी प्रतीक पर कर सकता है - पहला श्रमिक कदम हल हो जाता है।

अब, "थीम" संपत्ति का उपयोग करके, आप क्यूटी डिजाइनर में आइकन को परिभाषित कर सकते हैं, जैसा कि पहले से ही प्रश्न में दिखाया गया है। लिनक्स के तहत विकसित होने वाले लोगों के लिए, सिस्टम आइकन डिज़ाइनर में सही दिखाए जाएंगे (मान लीजिए कि आइकनसेट मानक आइकन नामों का उपयोग करता है)। यह मूल रूप है (आइकन आपके सिस्टम सेटिंग्स में कॉन्फ़िगर करने योग्य होंगे)। यह आपको ui->action_Open->setIcon(...) कोडिंग से मुक्त करता है।

और अंतिम ट्विक UI सेटअप से पहले विषय सेट करना है।

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent) 
{ 
#ifdef _WIN32 
    QIcon::setThemeName("tango"); 
#endif 

    ui = new Ui::MainWindow; 
    ui->setupUi(this); 

    ... 
    // NO NEED FOR ui->action_Open->setIcon(...) 
} 

निश्चित रूप से #ifdef कर सकते हैं सभी आवश्यक प्लेटफ़ॉर्म को लक्ष्य बना करने के लिए समायोजित, या लिनक्स सहित सभी प्लेटफार्मों पर एक ही प्रतीक के लिए मजबूर करने लोप हो।

परिणामस्वरूप, यह दृष्टिकोण सभी श्रमिक कोडिंग से बचाता है और नतीजा कम से कम लिनक्स पर सिस्टम आइकन के साथ संगत होता है।

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

  • कोई संबंधित समस्या नहीं^_^