Perché dovremmo aggiungere un nome oggetto a un oggetto QObject? Posso ancora caricare ed eseguire qualsiasi oggetto senza impostare il nome.Perché utilizzare QObject :: setObjectName()?
risposta
Bene, dipende da come si prevede di ottenere l'accesso a QObject in seguito. Esistono diverse funzioni QObject.find() che è possibile utilizzare per accedere a un QObject. Il nome aggiunge una "chiave" per filtrare la tua ricerca.
Ad esempio, nella tua classe probabilmente utilizzi variabili di istanza per questo invece di fare una ricerca, ma potresti effettivamente passare qualcosa che normalmente non possiedi, ma sai che c'è un pulsante specifico che vuoi modificare (ad esempio, un QPushButton in uno dei QInputDialogs integrati di Qt). Dare un nome al pulsante lo rende facile da trovare (ed è robusto se il pulsante scompare, si sposta nel layout, ecc.), Mentre il controllo del testo del pulsante o del conteggio in cui si trova nella gerarchia sarebbe molto più fragile (ad es. Pulsante il testo potrebbe cambiare tra le versioni o a causa della localizzazione, qualcuno aggiunge un nuovo layout, un pulsante extra).
Oppure si può desiderare un bel testo di debug quando si stampano i valori del puntatore (ad esempio, si desidera sapere quale QObject sta causando un problema). Semplifica anche lo scripting, ma non spiegherò perché qui.
Questa è davvero solo la punta dell'iceberg. Hai solo bisogno di impostare il nome se ne hai bisogno e solo tu sai quella risposta. :-)
Ha senso nel caso l'oggetto è script, e può essere utilizzato con findChild come questo
//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");
dove "bottone" è il nome dell'oggetto
Ci sono un paio di ragioni, una delle i grandi motivi per cui utilizzo i nomi degli oggetti sono a scopo di debug come indicato nel in the Qt qdebug guide.
È possibile utilizzare il nome dell'oggetto come ID Selector in Fogli stile Qt.
Esempio: se si vuole una proprietà da applicare solo ad una QLineEdit specifico, è possibile dare un nome utilizzando QObject :: ImpostaNomeOggetto() e utilizzare un selettore di ID per riferirsi ad esso:
myDialog->setStyleSheet("QLineEdit#nameEdit { background-color: yellow }");
- 1. Come utilizzare QMetaMethod con QObject :: connect
- 2. Errore con `QObject` sottoclasse e costruttore di copia:` QObject :: QObject (const QObject &) è private`
- 3. QObject cloning
- 4. QVariant to QObject *
- 5. lettura QObject/scrittura
- 6. È possibile organizzare QObject * su nullptr quando QObject viene distrutto?
- 7. conversione inaccessibile in QObject
- 8. Quanto pesa davvero QObject?
- 9. Perché QObject ha distrutto il segnale chiamato DOPO la distruzione?
- 10. Perché non posso impostare un genitore QObject in una classe di cui QObject è solo una base indiretta?
- 11. Ordine di slot richiesto QObject
- 12. QObject :: deleteLater attraverso un QThread
- 13. QObject (QPlainTextEdit) e problemi di multithreading
- 14. blackberry 10 Inclusione irrisolta <QObject>
- 15. App GUI Qt: avviso se QObject :: connect() non è riuscito?
- 16. Perché utilizzare asp: HyperLink
- 17. Perché utilizzare NSFetchedResultsController?
- 18. C# Perché utilizzare SuspendLayout()?
- 19. Perché utilizzare la serializzazione
- 20. Perché utilizzare JCL UNITVERSIONING?
- 21. Perché utilizzare gli eventi?
- 22. Perché utilizzare NSAutoreleasePool?
- 23. Stranezze di accesso alle variabili in un derivato QObject
- 24. QThread finished() collegato a deletelater di un QObject
- 25. È possibile disconnettere tutte le connessioni di QObject senza eliminarlo
- 26. QObject :: collegarsi: Impossibile coda argomenti di tipo 'int &'
- 27. PyQt5 Signals and Slots 'QObject has no attribute' error
- 28. Sottoclasse di QObject, qRegisterMetaType e il costruttore di copie private
- 29. Come eseguire QObject :: moveToThread() quando si utilizza QThreadPool?
- 30. Perché utilizzare Convert.ToInt32 su casting?