Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Polish
  4. Pytanie o Sloty - podstawy
QtWS25 Last Chance

Pytanie o Sloty - podstawy

Scheduled Pinned Locked Moved Solved Polish
3 Posts 3 Posters 707 Views
  • 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
    karlowic
    wrote on last edited by
    #1

    Witam
    Pytanie z tych naiwnych i irytujących. Proszę o wyrozumiałość.
    Jaka jest różnica między slotem a metodą w klasie.

    connect(ui->comboBox,SIGNAL(currentTextChanged(QString)),this,SLOT(refresh()));
    

    ta linijka kodu w zależności, gdzie umieszczę funkcję refresh() w pliku nagłówkowym
    private slots: działa
    private: nie działa
    Czy to tylko jedyna różnica?

    artwawA 1 Reply Last reply
    0
    • K karlowic

      Witam
      Pytanie z tych naiwnych i irytujących. Proszę o wyrozumiałość.
      Jaka jest różnica między slotem a metodą w klasie.

      connect(ui->comboBox,SIGNAL(currentTextChanged(QString)),this,SLOT(refresh()));
      

      ta linijka kodu w zależności, gdzie umieszczę funkcję refresh() w pliku nagłówkowym
      private slots: działa
      private: nie działa
      Czy to tylko jedyna różnica?

      artwawA Offline
      artwawA Offline
      artwaw
      wrote on last edited by
      #2

      @karlowic W skrócie - tak.
      Zadeklarowanie metody jako slot mówi Qt, że dana metoda może być podłączona do sygnału.
      Oczywiście, żeby układ sygnał-slot działał konieczne jest makro Q_OBJECT w danej klasie.
      Lektura: https://doc.qt.io/qt-5/metaobjects.html

      Jedna uwaga: używasz mocno przestarzałej składni co może prowadzić do trudnych do wyłapania błędów.
      Nowa składnia: connect(ui->comboBox,&QComboBox::currentTextChanged,this,&klasa::refresh);
      Lektura: https://doc.qt.io/qt-5/signalsandslots.html

      For more information please re-read.

      Kind Regards,
      Artur

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

        Tak jak napisał @artwaw zadeklarowanie metody jako slot dodaje ją do meta opisu klasy jako slot.

        Jeśli chodzi o connect, to metoda nie musi być slotem, żeby dało się ją podłączyć. Używając składni ze wskaźnikami do funkcji możesz do sygnału podłączyć dowolną metodę czy lambdę. Używając starej składni z makrami SIGNAL/SLOT metoda musi być slotem, ponieważ dopasowanie odbywa się po stringach opisujących sygnał/slot w meta opisie klasy.

        Warto też dodać, że ponieważ można łączyć nie tylko sloty, to do sygnałów można podpinać też inne sygnały, używając którejkolwiek ze składni. Można to wykorzystywać do tworzenia łańcuchów wywołań.

        To czy metoda jest slotem czy nie nie wpływa jedynie na możliwą składnię connecta. Ponieważ zadeklarowanie metody jako slot dodaje ją do meta opisu klasy to można taki slot wykorzystać w wielu jej metodach takich jak QMetaObject::connectSlotsByName czy QMetaObject::indexOfSlot. Sloty są również wywoływalne z QML, bez konieczności używania makra Q_INVOKABLE.

        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