मेरे पास अगली स्थिति है: मुझे स्टैंडअलोन स्थिर लाइब्रेरी में विजेट बनाना होगा, जिसे अंतिम एप्लिकेशन (विज़ुअल सी ++ 9.0, क्यूटी 4.5) से जोड़ा जाएगा। इस स्थिर विजेट लाइब्रेरी में कुछ संसाधन (आइकन) हैं, और इसमें कई .cpp फ़ाइलें शामिल हैं (प्रत्येक में स्टैंडअलोन विजेट होता है)। जहां तक मुझे पता है, मुझे क्यूटी संसाधन प्रणाली शुरू करनी होगी, अगर मैं स्थिर पुस्तकालय में उन्हें (संसाधन) का उपयोग करता हूं, तो "Q_INIT_RESOURCE (resource_file_name)" पर कॉल करें। मैं अगले कोड के साथ इस हल (स्थिर पुस्तकालय में हर .cpp फ़ाइल में):स्थैतिक पुस्तकालय में एम्बेडेड क्यूटी संसाधनों को शुरू करना
#include <QAbstractButton>
namespace {
struct StaticLibInitializer
{
StaticLibInitializer()
{
Q_INIT_RESOURCE(qtwidgets_custom_resources);
}
};
StaticLibInitializer staticLibInitializer;
}
// ... widget code ....
मेरा पहला दृष्टिकोण के बजाय, मैं अलग init.cpp फ़ाइल स्थिर पुस्तकालय परियोजना में प्रवर्तन कोड के साथ बनाया है (आरंभीकरण शामिल होने से बचाया प्रत्येक .cpp फ़ाइल में कोड), लेकिन यह काम नहीं किया।
यह क्यों काम नहीं किया?
क्या StaticLibInitializer के साथ यह दृष्टिकोण विभिन्न कंपाइलरों और प्लेटफार्मों के बीच सुरक्षित और पोर्टेबल है?
मेरी वर्तमान स्थिति में मेरे पास तीन .cpp फ़ाइलें हैं (उनमें से प्रत्येक अपने स्वयं के विजेट लागू करता है, उनमें से दो .qrc फ़ाइल से संसाधनों का उपयोग करते हैं), लेकिन प्रारंभिक कोड, जिसे मैंने मूल प्रश्न में दिया था, केवल उनमें से एक और सभी कार्यों में ठीक (100%, 50/50 नहीं)। तो मैं समझ नहीं पा रहा हूं, क्यों जब मैंने अलग-अलग init में प्रारंभिक कोड रखा।सीपीपी फ़ाइल मैं अपने संसाधनों का उपयोग नहीं कर सकता, लेकिन जब यह कोड विजेट की .cpp फ़ाइल में से किसी एक में ठीक काम करता है ... – cybevnm
इससे कोई फर्क नहीं पड़ता कि यह ठीक काम करता है ** अब ** :) यह केवल दुर्घटना से काम करता है। यह उस क्षण को काम करना बंद कर सकता है जब आप किसी अन्य कंपाइलर या उसी कंपाइलर के किसी अन्य संस्करण का उपयोग शुरू करते हैं। यह ** निहित बहेवियर ** है। अब यह काम करने का कारण यह है कि जब आपके पास विजेट के फाइल कंपाइलर में से एक में प्रारंभिक कोड होता है ** ** होता है ** पहले अपने संसाधनों को आरंभ करने के लिए। शुद्ध भाग्य, और कुछ नहीं। यदि आप अपने प्रोग्राम को 0% एक धूप दिन काम नहीं करना चाहते हैं तो * स्थिर प्रारंभिक आदेश fiasco * से बचने के लिए निर्देशों का पालन करें। –
संकलन चरण में संकलक द्वारा परिभाषित स्थैतिक प्रारंभिक क्रम है, या प्रोग्राम पुनरारंभ (बिना पुनर्मूल्यांकन के) के बीच भिन्न हो सकता है? – cybevnm