Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Polish
  4. Co oznacza toolMenu = menuBar()->addMenu(tr("&Tools"));
Forum Updated to NodeBB v4.3 + New Features

Co oznacza toolMenu = menuBar()->addMenu(tr("&Tools"));

Scheduled Pinned Locked Moved Polish
2 Posts 2 Posters 933 Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    kefir
    wrote on last edited by
    #1

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

    1 Reply Last reply
    1
    • Chris KawaC Offline
      Chris KawaC Offline
      Chris Kawa
      Lifetime Qt Champion
      wrote on last edited by
      #2

      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
      
      1 Reply Last reply
      1

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved