Tại sao chúng ta nên thêm tên đối tượng vào QObject? Tôi vẫn có thể tải và chạy bất kỳ đối tượng nào mà không cần đặt tên.Tại sao sử dụng QObject :: setObjectName()?
Trả lời
Vâng, tùy thuộc vào cách bạn lên kế hoạch truy cập vào QObject sau này. Có một số hàm QObject.find() mà bạn có thể sử dụng để truy cập vào QObject. Tên này thêm một "khóa" để lọc tìm kiếm của bạn. Ví dụ: Trong lớp của riêng bạn, bạn có thể sử dụng các biến mẫu cho thay vì thực hiện tìm kiếm, nhưng thực tế bạn có thể truyền một thứ mà bạn thường không sở hữu, nhưng bạn biết có một nút cụ thể mà bạn muốn chỉnh sửa (ví dụ, A QPushButton trong một trong QtputDialogs được xây dựng trong Qt). Đặt tên cho nút giúp dễ tìm (và mạnh mẽ nếu nút biến mất, di chuyển trong bố cục, v.v.), trong khi kiểm tra văn bản nút hoặc đếm vị trí trong cấu trúc phân cấp sẽ dễ vỡ hơn (ví dụ: nút văn bản có thể thay đổi giữa các phiên bản hoặc do bản địa hóa, ai đó thêm bố cục mới, nút bổ sung).
Hoặc bạn chỉ có thể muốn một số văn bản gỡ lỗi tốt đẹp khi bạn đang in giá trị con trỏ (tức là bạn muốn biết QObject nào đang gây ra sự cố). Nó cũng làm cho kịch bản dễ dàng hơn, nhưng tôi sẽ không giải thích tại sao ở đây.
Đây thực sự chỉ là đỉnh của tảng băng trôi. Bạn thực sự chỉ cần đặt tên nếu bạn có nhu cầu và chỉ bạn mới biết câu trả lời đó. :-)
Nó có ý nghĩa trong trường hợp đối tượng là kịch bản, và có thể được sử dụng với findChild như thế này
//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");
nơi "nút" là tên đối tượng
Có một vài lý do, một trong những những lý do lớn tôi sử dụng tên đối tượng là nhằm mục đích gỡ lỗi như được nêu ra in the Qt qdebug guide.
Bạn có thể sử dụng tên của đối tượng dưới dạng ID Selector trong Trang tính kiểu Qt.
Ví dụ: nếu bạn muốn có một tài sản để chỉ áp dụng cho một QLineEdit cụ thể, bạn có thể cho nó một cái tên sử dụng QObject :: setObjectName() và sử dụng một Selector ID để tham khảo với nó:
myDialog->setStyleSheet("QLineEdit#nameEdit { background-color: yellow }");
- 1. 'QObject :: QObject' không thể truy cập thành viên riêng được khai báo trong lớp 'QObject'
- 2. Lỗi với `QObject` lớp con và copy constructor:` QObject :: QObject (const QObject &) là private`
- 3. Cách thực hiện QObject :: moveToThread() khi sử dụng QThreadPool?
- 4. Nhân bản QObject
- 5. Tại sao sử dụng NSObjectController
- 6. tại sao sử dụng @ Url.Content
- 7. Tại sao sử dụng DialogFragment?
- 8. Tại sao sử dụng mysqli_close()?
- 9. QObject Multiple Inheritance
- 10. Tại sao tín hiệu QObject bị phá hủy được gọi là SAU sự hủy diệt?
- 11. Tại sao tôi không thể đặt cha mẹ QObject trong một lớp mà QObject chỉ là một cơ sở gián tiếp?
- 12. QVariant to QObject *
- 13. Tại sao Android sử dụng Java?
- 14. Tại sao tôi phải sử dụng $ (this)?
- 15. Tại sao sử dụng MultiParamTypeClasses trong MonadState
- 16. Tại sao sử dụng từ khóa void?
- 17. Tại sao lại sử dụng NSFetchedResultsController?
- 18. Tại sao lại sử dụng document.write?
- 19. Tại sao lại sử dụng hashmap?
- 20. C# lớp tĩnh tại sao sử dụng?
- 21. Tại sao nên sử dụng scala.collection.immutable.Stack
- 22. Tại sao HTTP sử dụng TCP?
- 23. Tại sao sử dụng AMQP/ZeroMQ/RabbitMQ
- 24. Tại sao tôi cần sử dụng ngắt?
- 25. Tại sao không ai sử dụng INotifyPropertyChanging?
- 26. Tại sao sử dụng strings.xml trong Android?
- 27. MVC3 tại sao sử dụng html.editorfor
- 28. Tại sao tôi nên sử dụng Socket.io?
- 29. Tại sao chúng ta sử dụng Response.ClearHeaders()?
- 30. Tại sao sử dụng @ Scripts.Render ("~/bó/jquery")