2011-10-08 12 views
12

के साथ स्ट्रिंग emt qt सिग्नल के साथ मानक स्ट्रिंग को उत्सर्जित करने का प्रयास कर रहा हूं। सिग्नल कतार के रूप में वितरित किया जाएगा। मैंने qRegisterMetaType के साथ टाइप पंजीकृत किया है, जैसा कि यह क्यूटी दस्तावेज में कहता है, लेकिन कोई भाग्य नहीं है। मैं इसे इस qRegisterMetaType<std::string>("std::string")emt std :: स्ट्रिंग qt सिग्नल

उत्तर

17

की तरह दर्ज की कर रहा हूँ तुम भी करना चाहिए:

Q_DECLARE_METATYPE (std::string) 

एक Q_DECLARE_METATYPE() प्रकार सभी टेम्पलेट आधारित कार्यों के लिए जाना जाता है उन्हें जोड़ने से Qt Doc

का हवाला देते हुए, QVariant सहित। ध्यान रखें कि आप qRegisterMetaType() कॉल करने के लिए के बाद से नाम कार्यावधि में हल कर रहे हैं कि अगर आप पंक्तिबद्ध संकेत और स्लॉट कनेक्शन में या QObject के संपत्ति प्रणाली में प्रकार, उपयोग करना चाहते हैं।

+0

मैंने कोशिश की, अभी भी काम नहीं करता है। इसके अलावा मेरे पास मेरे प्रोजेक्ट में कई सिग्नल हैं जो गैर क्यूटी प्रकारों को उत्सर्जित कर रहे हैं, और कभी भी Q_DECLARE_METATYPE नहीं किया, केवल qRegisterMetaType, और वे काम कर रहे हैं। – user152508

+1

मैंने अभी एक त्वरित परीक्षण किया है, और Q_DECLARE_METATYPE के साथ qRegisterMetaType दोनों का उपयोग वास्तव में काम करता है। QRegisterMetaType को कॉल करने की आवश्यकता के बारे में एक रन-टाइम त्रुटि संदेश में एक परिणाम छोड़ना। मेरा अनुमान है कि आप जिस अन्य प्रकार का उपयोग कर रहे हैं, उसके लिए आप एक कतारबद्ध कनेक्शन का उपयोग नहीं कर रहे हैं। – Chris

+0

ठीक है, मैं इस ओवरलोड शून्य qRegisterMetaTypeStreamOperators (कॉन्स char * typeName) का उपयोग कर रहा था, शायद यह क्यों काम नहीं कर रहा था। जब यह Q_DECLARE_METATYPE के संयोजन के साथ int qodegisterMetaType() को ओवरलैड करने का प्रयास करता है, तो यह बहुत बहुत धन्यवाद। – user152508