2012-04-04 9 views

risposta

14

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. :-)

5

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

6

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.

10

È 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 }"); 
Problemi correlati