2016-07-16 8 views
8

मैं सिर्फ एक क्यूटी ट्यूटोरियल शुरू कर रहा हूं, और मैं सी ++ का शुरुआती स्तर भी हूं।क्या मैं पॉइंटर्स द्वारा ऑब्जेक्ट पॉइंटर तक पहुंचने के लिए '->' ऑपरेटर का उपयोग कर सकता हूं?

ui->pushButton->setText("Hello"); 

मैं समझता हूँ कि हम एक सूचक वर्ग के सदस्य का उपयोग करने की अनुमति देने के लिए -> ऑपरेटर का उपयोग कर सकते हैं: क्यूटी ट्यूटोरियल में, वहाँ एक उदाहरण है कि बयान का उपयोग बटन के पाठ सेट करने के लिए है। इस मामले में, pushButton->setText("Hello"), लेकिन मुझे ui->pushButton के अर्थ को समझ में नहीं आया है, मुझे कुछ उत्तरों की खोज में बताया गया है कि uipushButton का संदर्भ धारण करता है, लेकिन यह कैसे किया जा सकता है? pushButton ऑब्जेक्ट के लिए पॉइंटर है, क्लास का सदस्य नहीं है, क्या हम ऑब्जेक्ट एड्रेस को ui पॉइंटर पर रखने के लिए -> का उपयोग कर सकते हैं?

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

उत्तर

8

ui सूचक एक्सएमएल आप क्यूटी निर्माता के रूप संपादक के साथ बनाने से उत्पन्न होता है के रूप में लिखा जा सकता है।

आप आउटपुट निर्देशिका में स्वत: जेनरेटेड हेडर फ़ाइल पा सकते हैं। उदाहरण के लिए मुख्य विंडो में ui_mainwindow.h है। यह फ़ाइल qmake चलाने के बाद बनाई गई है। यदि आप क्यूटी निर्माता का उपयोग करते हैं तो यह स्वचालित रूप से किया जाता है।

class Ui_MainWindow 
{ 
public: 
    QWidget *centralWidget; 
    QPushButton *pushButton; 
    QMenuBar *menuBar; 
    QToolBar *mainToolBar; 
    QStatusBar *statusBar; 
    ... 
}; 

ui एक Ui_MainWindow * ताकि आप pushButton की तरह, Ui_MainWindow वर्ग के सदस्यों तक पहुँचने के लिए उस पर -> का उपयोग कर सकते है:

यहाँ एक स्वत: जनरेट की ui का एक उदाहरण है।

pushButton एक QPushButton * ताकि आप setText() की तरह, QPushButton वर्ग के सदस्यों तक पहुँचने के लिए उस पर -> का उपयोग कर सकते है।है एक के सदस्यों तक पहुँचने के लिए सिर्फ एक ऑपरेटर

-> एक सूचक बातें :)

-> करने के लिए अनुमति नहीं देता:

ui->pushButton->setText("Hello") इस के बराबर है:

Ui_MainWindow * ui = new Ui_MainWindow; 
... 
QPushButton * btn = ui->pushButton; 
btn->setText("Hello"); 

कुछ सुधार कक्षा या संरचना, और एक सूचक पर लागू होना चाहिए। यदि आपके पास कोई उदाहरण है तो आपको सदस्यों तक पहुंचने के लिए . ऑपरेटर का उपयोग करना होगा।

कृपया देखें: operators

अंत में similar question आपको पढ़ना चाहिए।

+1

मैंने उस हेड फ़ोल्डर की जांच की, यह अस्तित्व में था। मुझे लगता है कि मुझे कुछ बुनियादी ज्ञान की कमी है, जैसे पृष्ठभूमि में क्यूटी कैसे काम करता है। आपके विस्तृत उत्तरों के लिए बहुत बहुत धन्यवाद, मैं वास्तव में इसकी सराहना करता हूं। – Vito

3

"तीर" ऑपरेटर -> का उपयोग अपने सदस्यों को प्राप्त करने के लिए ऑब्जेक्ट्स को डिफरेंस पॉइंटर्स के लिए किया जाता है। इसलिए यदि आपके पास सूचक ui में एक पॉइंटर ऑब्जेक्ट है और ऑब्जेक्ट में सदस्य pushButton है तो आप pushButton सदस्य तक पहुंचने के लिए ui->pushButton का उपयोग कर सकते हैं। यदि pushButton सदस्य बदले में किसी ऑब्जेक्ट के लिए पॉइंटर है तो आप ui->pushButton->setText("Hello") जैसे सदस्यों को एक्सेस करने के लिए फिर से -> का उपयोग करें।

"तीर" ऑपरेटर का उपयोग मूल रूप से अव्यवस्था (यूनरी *) और डॉट (.) सदस्य पहुंच ऑपरेटर के लिए सिंटैक्टिक चीनी है।

तो बयान

ui->pushButton->setText("Hello"); 

भी

(*(*ui).pushButton).setText("Hello"); 
+0

उत्तर के लिए धन्यवाद, जोआचिम। मैं समझता हूं कि हम ऑब्जेक्ट्स को ड्रेफरेंस पॉइंटर्स के लिए "->" का उपयोग कर सकते हैं। हालांकि, मुझे यकीन नहीं है कि "पुशबटन" "यूई" का सदस्य है। मैंने देखा "पुशबटन" क्यूटी में एक ऑब्जेक्टनाम है। यदि हां, तो "पुशबटन" कैसे "यूई" का सदस्य बन जाता है। – Vito

+0

@ विटो अगर 'पुशबटन' 'ui' ऑब्जेक्ट का सदस्य नहीं था, तो आपको एक कंपाइलर त्रुटि मिल जाएगी। –

+0

मुझे अब मिल गया, बहुत बहुत धन्यवाद – Vito

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

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