Qt - kontrolki oraz ich sygnały i sloty

Stronę tą wyświetlono już: 16 razy

Sygnały i sloty w Qt są wykorzystywane do komunikacji pomiędzy oknem programu a kontrolką lub bezpośrednio pomiędzy kontrolkami. Sygnały i sloty można łączyć ręcznie wpisując odpowiedni kod, jednakże możliwe jest również zrobienie tego w trybie projektowania Desing. W tym celu utworzyć należy projekt z dwiema kontrolkami:

  • Label - czyli zwykły statyczny tekst;
  • Push button - czyli zwykły przycisk
Widok utworzonego projektu GUI
Rys. 1
Widok utworzonego projektu GUI

Warto zmienić domyślne właściwości tych kontrolek:

  • dla kontrolki Label należy zmienić właściwości:
    • objectName na helloWorld (to będzie nazwa obiektu kontrolki, która będzie wykorzystywana w kodzie);
    • text z domyślnej na label (to jest tekst wyświetlany w kontrolce);
  • dla kontrolki Push button należy zmienić właściwości:
    • objectName z domyślnej na write;
    • text z domyślnej na Wyświetl

Teraz należy kliknąć na kontrolce Push button prawym przyciskiem myszy i z menu kontekstowego wybrać pozycję Przejdź do slotu&dots;. Po tej czynności ukazać się powinno okno Przejdź do slotu, w którym niezwłocznie należy kliknąć pozycję clicked().

Okno Przejdź do slotu
Rys. 2
Okno Przejdź do slotu

Po wykonaniu tej czynności program powinien utworzyć automatycznie sygnał o nazwie on_write_clicked i przenieść do tak utworzonego sygnału pokazując taki oto kod:

Listing 1
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. MainWindow::MainWindow(QWidget *parent) :
  4. QMainWindow(parent),
  5. ui(new Ui::MainWindow)
  6. {
  7. ui->setupUi(this);
  8. }
  9. MainWindow::~MainWindow()
  10. {
  11. delete ui;
  12. }
  13. void MainWindow::on_write_clicked()
  14. {
  15. }

Klasa MainWindow zajmuje się obsługą wszystkiego co dotyczy GUI programu. Wewnątrz tej klasy masz dostęp do wszystkich obiektów klas, które reprezentują kontrolki wstawione w widoku projektowania Design. Dostęp do nich jest z poziomu obiektu o nazwie ui (user interface). Oto jak wykorzystując ten obiekt można się odwołać do utworzonej wcześniej kontrolki Label i zmienić tekst przez nią wyświetlany:

Listing 2
  1. void MainWindow::on_write_clicked()
  2. {
  3. ui->helloWorld->setText("Hello World!");
  4. }

Powyższy kod zmieni tekst zawarty w kontrolce Label z wcześniej ustawionego na Hello World!. Dostęp do wszystkich kontrolek programu utworzonych w widoku projektowania Design będzie zawsze możliwy z poziomu obiektu ui.

Komentarze