Co oznacza toolMenu = menuBar()->addMenu(tr("&Tools"));
-
toolMenu to jest wskaźnik
I właśnie tu pojawia się problem, co ta linijka w ogóle oznacza? Nie chodzi mi o to co ona tworzy, bo pojawia się to analogicznie w wielu przykładach, chodzi mi o składnię.
Dlaczego po znaku "=" nie ma operatora "new" i czemu po funkcji menuBar() jest ->, ta funkcja zwraca wskaźnik? Ale to i tak dziwnie by wyglądało wskaźnik=wskażnik2->adMenu(...). Jeszcze zrozumiałbym
wskaźnik = & (wskażnik2->adMenu(...)).
Jakby ktoś pomógłby mi rozwiać wątpliwości to jestem dozgonnym dłużnikiem ;) -
Cześć, witamy na forum
To pytanie w zasadzie z podstaw podstaw c++. Po kolei więc:
Jest sobie jakaś klasa, która ma metodęmenuBar()
, która zwraca wskaźnik do instancji klasy QMenuBar. Jeśli jesteś w jednej z jej innych metod to możesz się do niej odwołać bezpośrednio, a kompilator po cichu wywoła to na wskaźnikuthis
:QMenuBar* mb = menuBar(); //kompilator po cichu robi z tego: QMenuBar* mb = this->menuBar();
Mając wskażnik do obiektu QMenuBar możesz wywołać na nim metodę
addMenu()
:QMenuBar* mb = menuBar(); mb->addMenu("whatever");
W środku metoda
addMenu
wygląda (w sporym uproszczeniu) tak:QMenu* MenuBar::addMenu(const QString& text ) { return new QMenu(text, this); }
czyli tworzy nowe menu należące do paska menu i zwraca wskaźnik do niego.
Ponieważ metoda addMenu() zwraca wskaźnik to możemy go sobie zapisać:QMenuBar* mb = menuBar(); QMenu* toolMenu = mb->addMenu("whatever");
Ponieważ wskaźnik mb jest nam potrzebny tylko w tym jednym miejscu i tylko raz to możemy go sobie pominąć i w miejscu, gdzie jest użyty wstawić kod, który go zwraca:
QMenu* toolMenu = menuBar()->addMenu("whatever");
Czyli podsumowując:
QMenu* toolMenu = menuBar() //to zwraca wskaznik na QMenuBar ->addMenu("whatever"); //to wywołuje metodę na obiekcie wskazywanym przez ten wskaźnik