今天,重新溫習了一下以往Qt4的書,並對一些基本的東西做了一個測試。
在測試的過程中發現一個問題,就是setObjectName()這個函數到底有什么作用,或者說是ObjectName本身有什么作用???
然后我就想了一下,回憶了一下創建控件的流程:
QLabel *m_pLbl = new QLabel(this);
m_pLbl->setObjectName("testLbl");
就沖着這個流程我想了一下,介紹一下我的理解:
QLabel 是一個總體的抽象;m_pLbl是抽象的一個實例;而ObjectName相當於給這個實例命了個名字。——唯一標識符
類比一下:人->生了個孩子->給孩子起名。
起完名之后,就可以通過孩子的名字對孩子進行各種操作。
但是中間有一個問題,就是,如果創建了不同的label,其實例化的名字也是不同的,為什么不能用實例化的名字當做唯一標識符呢???
比較直觀的理解就是,這個指針的名字相當於是內部約定的代號,比如說代碼內部可以通過m_pLbl來對這個label進行相應的操作;但是如果外界想要訪問這個label,則無法通過指針名m_pLbl來進行訪問,因為這個名字僅僅限於內部使用,對於外部的人來說,如果想要訪問這個控件,必須要知道這個控件的ObjectName,這個ObjectName相當於是一個鍵值對的“鍵”,其對應的“值”就是這個label,一個完整的映射關系。
主要是用於對於外界想要訪問這個控件——比如說設置樣式表,別人不知道這個控件的名字,只有設置了ObjectName才能找到其對應的控件。
就比如說,這個孩子,小名叫“狗子”,就是這里面的m_pLbl,自己家里人知道他叫“狗子”,所以只用小名就能找到他。但是某一天突然來了一個外面的人,要找他,通過“狗子”是無法找到這個人的,因為沒有“一一對應”的關系,這個時候,就需要給他設置一個唯一標識符,如身份證號,如唯一的大名。
總結:ObjectName主要是用於外界來訪問內部的控件成員的,如果外界不需要訪問這個成員,則理論上無需設置它的ObjectName。