2016-07-16 17 views
8

Właśnie zaczynam samouczek Qt, a także jestem początkującym poziomem C++. W tutorialu Qt, nie jest przykładem, że używają oświadczenie ustaw przycisk za tekst:Czy mogę użyć operatora "->", aby uzyskać dostęp do wskaźnika obiektu za pomocą wskaźników?

ui->pushButton->setText("Hello"); 

Rozumiem, że możemy użyć -> operatorowi umożliwić wskaźnik dostępu do członka klasy. W tym przypadku, pushButton->setText("Hello"), ale po prostu nie rozumiem znaczenia ui->pushButton, szukam niektórych odpowiedzi wyjaśnił, że ui posiadają odniesienia pushButton, ale w jaki sposób można to zrobić? pushButton jest wskaźnikiem do obiektu, nie jest członkiem klasy, czy możemy użyć adresu ->, aby umieścić adres obiektu na wskaźniku ui?

Przepraszam za mój zły język angielski, mogę cię pomylić. Chciałbym, żeby ktoś mógł dać mi jasne wyjaśnienie, z góry dzięki.

Odpowiedz

8

Wskaźnik ui jest generowany z xml utworzonego za pomocą edytora formularza Qt Creator.

Możesz znaleźć wygenerowany automatycznie plik nagłówkowy w katalogu wyjściowym. Na przykład główne okno ma ui_mainwindow.h. Ten plik jest tworzony po uruchomieniu qmake. Jeśli używasz narzędzia QT Creator, jest to wykonywane automatycznie.

Oto przykładem wygenerowany automatycznie ui:

class Ui_MainWindow 
{ 
public: 
    QWidget *centralWidget; 
    QPushButton *pushButton; 
    QMenuBar *menuBar; 
    QToolBar *mainToolBar; 
    QStatusBar *statusBar; 
    ... 
}; 

ui jest Ui_MainWindow * więc można użyć -> na to, aby uzyskać dostęp do członków klasy Ui_MainWindow, jak pushButton.

pushButton jest QPushButton * więc można użyć -> na to, aby uzyskać dostęp do członków klasy QPushButton, jak setText().

ui->pushButton->setText("Hello") jest odpowiednikiem tego:

Ui_MainWindow * ui = new Ui_MainWindow; 
... 
QPushButton * btn = ui->pushButton; 
btn->setText("Hello"); 

Niektóre poprawki:

-> nie pozwalają wskaźnik robić rzeczy :)

-> jest tylko operatorem, aby uzyskać dostęp członków klasa lub struct i musi być zastosowana do wskaźnika. Jeśli masz instancję, musisz użyć operatora ., aby uzyskać dostęp do członków.

Zobacz: operators.

Wreszcie należy przeczytać similar question.

+1

Sprawdziłem, że folder głowy, istnieje. Myślę, że brakuje mi podstawowej wiedzy, na przykład o tym, jak działa Qt w tle. Dziękuję bardzo za szczegółowe odpowiedzi, naprawdę to doceniam. – Vito

3

Operator "strzałki" -> służy do usuwania wskaźników do obiektów w celu pobrania ich członków. Jeśli więc masz wskaźnik obiektu w zmiennej ui, a obiekt ma element pushButton, możesz użyć ui->pushButton, aby uzyskać dostęp do elementu pushButton. Jeśli element pushButton z kolei jest wskaźnikiem do obiektu, ponownie uzyskuje się numer ->, aby uzyskać dostęp do jego elementów, na przykład ui->pushButton->setText("Hello").

Operatorem "strzałki" jest w zasadzie tylko cukier syntaktyczny dla operatora dostępu do podzbioru (jednoargumentowy *) i dot (.).

Więc stwierdzenie

ui->pushButton->setText("Hello"); 

można także zapisać jako

(*(*ui).pushButton).setText("Hello"); 
+0

Dzięki za odpowiedź, Joachim. Rozumiem, że możemy użyć "->" do dereferencji wskaźników do obiektów. Jednak nie jestem pewien, czy "pushButton" jest członkiem "ui". Widziałem "pushButton" to nazwa obiektu w Qt. Jeśli tak, w jaki sposób "pushButton" staje się członkiem "ui". – Vito

+0

@Vito Jeśli 'pushButton' nie był członkiem obiektu' ui', pojawi się błąd kompilatora. –

+0

Mam go teraz, dziękuję bardzo – Vito

Powiązane problemy