爲什麼要向QObject添加一個對象名?我仍然可以加載並運行任何對象而無需設置名稱。爲什麼使用QObject :: setObjectName()?
6
A
回答
14
那麼,這取決於你計劃如何訪問QObject。有幾個QObject.find()函數可用於訪問QObject。該名稱添加一個「鍵」來過濾搜索。
例如,在你自己的類中,你可能使用實例變量來代替搜索,但實際上你可能會傳遞你通常不擁有的東西,但是你知道有一個你想要的特定按鈕編輯(例如,在Qt的內置QInputDialogs中的一個QPushButton)。給按鈕一個名稱可以很容易地找到(如果按鈕消失,在佈局中移動等,則該按鈕非常強大),而檢查按鈕文本或計算其在層次結構中的位置會更脆弱(例如,按鈕文本可能會在版本之間改變,或者由於本地化,有人添加新的佈局,額外的按鈕)。
或者當您打印指針值時(即,您想知道哪個QObject導致問題),您可能只需要一些很好的調試文本。它也使腳本更容易,但我不會在這裏解釋爲什麼。
這實在只是冰山一角。如果你有需要,你只需要設置名稱,只有你知道答案。 :-)
5
這使得在對象編寫腳本的情況下感,並能與findChild用作該
//button is the object name, which needs to be define in qml for the component.e.g. objectName: "button"
QObject *buttonQML = view.rootObject()->findChild<QObject*>("button");
其中「按鈕」是對象名稱
6
有幾個原因,一個我使用對象名的主要原因是調試目的,如in the Qt qdebug guide。
10
您可以在Qt樣式表中使用該對象的名稱作爲ID Selector。
例如:如果你想有一個屬性只適用於一種特定QLineEdit的,你可以使用的QObject :: setObjectName(給它一個名稱),並使用一個ID選擇器來引用它:
myDialog->setStyleSheet("QLineEdit#nameEdit { background-color: yellow }");
相關問題
- 1. 爲什麼QObject :: findChildren返回具有公共基類的子代?
- 2. 將const QObject *轉換爲QObject *
- 3. 什麼是知道QObject名稱是否已更改的最佳方法
- 4. 爲什麼QObject銷燬稱爲AFTER銷燬的信號?
- 5. 什麼是「從Qt的QObject的:: dumpObjectInfo()
- 6. 爲什麼我不能在QObject只是間接基類的類中設置QObject父類?
- 7. 使用Javascript對QObject進行QML綁定訪問QObject屬性
- 8. 爲什麼QObject需要成爲多繼承情況下的第一個
- 9. QObject :: QObject(QObject parent = 0)在這個上下文中是私有的
- 10. 爲什麼在項目中使用'assert'? (爲什麼使用它這麼多次)
- 11. 爲什麼使用CRTP
- 12. 爲什麼不使用PHP?
- 13. 爲什麼使用IEventDispatcher.hasListener()?
- 14. 爲什麼Heroku使用Postgresql?
- 15. 爲什麼使用wsgiref simple_server?
- 16. 爲什麼使用事件?
- 17. 爲什麼使用redux-thunk?
- 18. 爲什麼使用MEMCACHED_BEHAVIOR_NOREPLY?
- 19. 爲什麼使用IEditableCollectionView?
- 20. 爲什麼使用-9999px
- 21. 爲什麼Kademlia使用UDP?
- 22. 爲什麼要使用Hashtable.Synchronized?
- 23. ReactJS:爲什麼使用this.props.children?
- 24. 爲什麼使用JSP/Servlets?
- 25. 爲什麼'Data.List.null'使用'foldr'?
- 26. 爲什麼使用NSFetchedResultsController?
- 27. MVC3爲什麼使用html.editorfor
- 28. 爲什麼使用Login.asp?
- 29. 爲什麼要使用PortletURL?
- 30. 爲什麼bookmarklet使用iframe?