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


  • Moderators

    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źniku this:

    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
    

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.