2012-04-04 11 views

Odpowiedz

14

Cóż, to zależy od tego, w jaki sposób planujesz uzyskać dostęp do QObject później. Istnieje kilka funkcji QObject.find(), których można użyć w celu uzyskania dostępu do obiektu QObject. Nazwa dodaje "klucz" do filtrowania wyszukiwania.

Na przykład we własnej klasie prawdopodobnie użyjesz do tego zmiennych instancji zamiast przeprowadzać wyszukiwanie, ale możesz faktycznie przekazać coś, czego zwykle nie posiadasz, ale wiesz, że istnieje określony przycisk, który chcesz edit (np. A QPushButton w jednym z QT wbudowanych QInputDialogs). Nadanie przycisku nazwy ułatwia odnalezienie (i jest niezawodny, jeśli przycisk zniknie, porusza się w układzie itp.), Natomiast sprawdzenie tekstu przycisku lub zliczenie jego położenia w hierarchii będzie znacznie bardziej kruche (np. Przycisk tekst może się zmieniać między wersjami lub z powodu lokalizacji, ktoś dodaje nowy układ, dodatkowy przycisk).

A może po prostu potrzebujesz ładnego tekstu debugowania podczas drukowania wartości wskaźnika (np. Chcesz wiedzieć, który obiekt QObject powoduje problem). Ułatwia także pisanie skryptów, ale nie wyjaśniam, dlaczego tak jest.

To naprawdę tylko wierzchołek góry lodowej. Naprawdę musisz tylko ustawić nazwę, jeśli potrzebujesz jej i tylko ty znasz tę odpowiedź. :-)

5

To ma sens w przypadku, gdy obiekt jest skrypty i może być używany z findChild jak ten

//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"); 

gdzie „przycisk” jest nazwa obiektu

6

Istnieje kilka powodów, jednym z Wielkie powody, dla których używam nazw obiektów, służą do celów debugowania, tak jak to zostało opisane na in the Qt qdebug guide.

10

Możesz użyć nazwy obiektu jako ID Selector w Arkuszach stylów Qt.

Przykład: jeśli chcesz nieruchomość zastosowanie tylko do jednego konkretnego QLineEdit, można nadać mu nazwę za pomocą QObject :: setObjectName() i używać selektor identyfikatora odnieść się do niego:

myDialog->setStyleSheet("QLineEdit#nameEdit { background-color: yellow }"); 
Powiązane problemy