2010-04-07 11 views
7

मैं जब मैं ऊपर मैं कनेक्ट संकेतों के बारे में त्रुटियों मिलता है इस
मैं QWidget और QThread दोनों से कैसे प्राप्त कर सकता हूं?

class GUI : public QWidget, public QThread 

की तरह एक वर्ग है। The error says Reference to "connect" is ambiguous। क्या दोनों से उत्तराधिकारी का कोई तरीका है?

धन्यवाद

+5

कृपया बताएं कि आप ऐसा क्यों करना चाहते हैं। चूंकि यह नहीं किया जा सकता है (उत्तर देखें) हम जानना चाहते हैं कि कौन सी चीजें * आपको * सुझाव देने के लिए काम करेंगे। इसके लिए अधिक जानकारी की आवश्यकता है। –

+0

मेरा प्रोग्राम फायरवायर के माध्यम से किसी अन्य कंप्यूटर से संदेश प्राप्त करता है। प्राप्त संदेश उन फाइलों को निर्देशित किए जाते हैं जहां से जीयूआई उन्हें पढ़ता है। मैं एक थ्रेड में फायरवायर संदेशों को संभालना चाहता हूं, और जीयूआई को दूसरे थ्रेड में संभालना चाहता हूं। – infinitloop

उत्तर

11

आप नहीं कर सकते। QWidget और QThread दोनों QObject से उत्तराधिकारी (गैर-वर्चुअल) दोनों हैं। इसलिए आपके पास वर्चुअल व्युत्पन्न नहीं है, इस प्रकार QObject की दो प्रतियां, जो संकलक को भ्रमित करती हैं। QObject विशेष रूप से इस तरह से डिजाइन किया गया था। देखें:

कुछ जिसने कथित रूप से इस के आसपास चला गया (लिंक अभी नहीं मिल रहा है कर रहे हैं, लेकिन यह गूगल पर वहाँ बाहर है, मैं एक ही मुसीबत था दो हफ्ते पहले), लेकिन यह सबसे अच्छा असुरक्षित है।

संपादित करें: संभवतः सबसे अच्छा तरीका QThread से अन्य ऑब्जेक्ट प्राप्त करना होगा और उस ऑब्जेक्ट को अपने GUI कक्षा में सदस्य के रूप में रखना होगा। इस मामले में अधिकांश लोग इस तरह के कामकाज करते हैं।

-1

आप एकाधिक QObjects से प्राप्त नहीं कर सकते हैं।

आप एक से प्राप्त कर सकते हैं और दूसरे को सदस्य चर बना सकते हैं और वहां से काम कर सकते हैं।

class GUI : public QWidget 
{ 
    QThread myThread; 
}; 

आपने अपना कक्षा जीयूआई नाम दिया है - क्या यह आपके कार्यक्रम का मुख्य जीयूआई है? क्यूटी उदाहरण फ़ोल्डर में उदाहरण देखें - उनके पास GUI's और Threads दोनों पर नमूना कार्यक्रम हैं।

+2

केवल मुख्य धागा विगेट्स पर काम कर सकता है, इसलिए विजेट को थ्रेड का सदस्य बनाना अजीब लगता है। यह क्या हो सकता है? –

+0

ओह, उसे नहीं पता था। – Will

+3

"आपको QMainWindow से विरासत में होना चाहिए" झूठा है, आपको केवल ऐसा करना चाहिए यदि आप वास्तव में QMainWindow द्वारा प्रदान की गई कुछ विशेषताओं को चाहते हैं। माता-पिता के बिना कोई QWidget स्वचालित रूप से एक विंडो है। – rohanpm

0

QWidgets और जीयूआई संबंधित ऑब्जेक्ट्स अनुप्रयोग मुख्य थ्रेड की तुलना में अलग-अलग धागे में नहीं हैं। आपको दोनों का उत्तराधिकारी नहीं होना चाहिए। आप विजेट के moveToThread() फ़ंक्शन को भी कॉल नहीं कर सकते हैं।

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