helloWorld

[Kurs Qt] Instalacja Qt Creator’a i pierwszy program

Instalacja


Instalacja Qt Creator’a jest raczej dość standardowa (w przypadku Linuksa zapraszam pod ten link), pobieramy Qt Creator a następnie dość długo czekamy bo nawet kilkadziesiąt minut. Po zainstalowaniu polecam chociaż przejrzeć sobie przykłady dostępne wewnątrz IDE, ponieważ są dość „życiowe” tzn są dość pomocne i pokazują na użytecznych przykładach działanie Qt. W przypadku Linuksa odsyłam do kolejnej lekcji, a następnie powrót tutaj.

 

 

Edytor


Zaraz po uruchomieniu naszym oczom powinien się ukazać ekran powitalny, z którego mamy dostęp do kilku opcji m. in. do utworzenia nowego projektu, wczytania, otworzeniu ostatnio wczytywanego projektu, itd.

Oprócz tego mamy dostęp do przykładów (Examples), które są dość mocno opisane, a także kursów (Tutorials), które są w postaci tekstowej lub wideo.

 

Kolejną zakładką jest Edit, która przenosi nas do edytora kodu, na start mamy wygenerowanych kilka plików o czym pomówimy sobie nieco szerzej nieco później, w każdym razie tutaj spędzamy stosunkowo najwięcej czasu, dlatego polecam zmienić sobie w opcjach skórkę edytora na ciemną (Tools -> Options… ->Text Editor -> Color Scheme).

 

W Design zajmujemy się stroną estetyczną programu, tzn możemy w dowolny sposób wstawiać do programu elementy, np pola do wprowadzania tekstu itp.

Do tej zakładki wchodzimy poprzez dwukrotne kliknięcie mainwindow.ui w Edit.

 

Projects jest ostatnią zakładką, która może nam się przydać w tym kursie. Tutaj możemy zmienić opcje dotyczące budowania aplikacji, gdy np. nie chcemy zmienić tych ustawień globalnie, a tylko i wyłącznie dla tego projektu.

 

Zaczynamy!


Czas zacząć nasz poradnik, dzisiaj napiszemy sobie prosty program, który po wciśnięciu przycisku zmienia na nim napis.

Do dzieła wybieramy z ekranu startowego opcję New Project. Z dostępnych opcji wybieramy Applications -> QT Widgets Application i następnie wpisujemy nazwę projektu. Kolejne opcje pozostawiamy bez zmian i klikamy już do końca Next.

Jeżeli przejdziemy do Edit to możemy, że zostały utworzone pliki:

kursQT.pro który będziemy edytować jeżeli będziemy chcieli dodać standardowo nie dołączone bezpośrednio do projektu moduły QT, np Bluetooth.

mainwindow.ui to plik, w którym jest zapisywany „wygląd” naszej aplikacji.

main.cpp to plik, którego nie będziemy modyfikowali, zajmuje się on uruchomieniem aplikacji.

Klasa mainwindow, czyli klasa którą będziemy modyfikowali i dla nas to ona jest pierwszym modyfikowalnym miejscem (a nie main.cpp), bo ona jest uruchamiana zaraz po włączeniu programu.

Przejdźmy teraz do zakładki Design, poprzez dwukrotne kliknięcie mainwindow.ui:

Możemy tutaj wyróżnić sześć głównych elementów:

  1. listę elementów, które dodajemy do okna przez przeciągnięcie ich i opuszczenie na oknie (2), trzeba sobie uświadomić że to nie są wszystkie elementy, bo niektóre trzeba użyć poprzez napisanie kodu, ale te dostępne tutaj powinny nam wystarczyć
  2. okno robocze, które możemy dowolnie modyfikować, widoczne kropki są jedynie pomocnicze i mówią nam gdzie można ustawić elementy
  3. hierarchia obiektów na scenie
  4. właściwości zaznaczonego obiektu, które możemy modyfikować
  5. 6. (na obrazku zapomniałem dodać 5) edytor akcji, a także sygnałów i slotów (o sygnałach i slotach powiemy sobie za chwilę).

 

Zanim umieścimy przycisk to usuńmy jeszcze automatycznie utworzony pasek narzędzi, czyli w Hierarchii Obiektów (3) klikamy PPM na mainToolBar -> Remove Toolbar.

Teraz znajdźmy na liście obiektów (1) w sekcji Buttons: Push Button i przeciągnijmy go na nasze okno. Zmieńmy także wyświetlany przez niego tekst poprzez kliknięcie na niego 2 razy LPM i ustawmy: „Hello World”. Możemy to także zrobić poprzez kliknięcie go i znalezienie we właściwościach obiektu (4) opcji text.

Nadszedł najwyższy czas aby wspomnieć coś o działaniu sygnałów i slotów, które są dość ważnym elementem w pisaniu aplikacji za pomocą Qt.

Czym jest sygnał? Jest to wydarzenie, które może być dość ważne dla programu, sygnał zostaje wysłany jeżeli użytkownik np. wciśnie przycisk.

Z kolei slot jest „odpowiedzią” na wysłany sygnał czyli uruchomieniem jakiejś funkcji np do zmiany tekstu przycisku, schematycznie to może wyglądać tak:

sygnał: kliknięto przycisk, a więc użyj przypisanego do niego slota, a więc zmień tekst.

W praktyce wygląda to tak:

Podałem w tym kodzie też przykład jak należy rozumieć ten zapis, ale nie wolno tego robić za pomocą if’ów. Sam system sygnałów i slotów jest nieco skomplikowany dlatego aby nie zadręczać was nadmiarem wiedzy, będę starał się tłumaczyć wszystko w miarę potrzeb. Tutaj daje jedynie informację że takie coś istnieje i jak wygląda połączenie slotu z sygnałem.

Jednak my głównie będziemy korzystali z makr, dzięki czemu nie będziemy używali connect, a kompilator zrobi to za nas, a więc do roboty:

Jeżeli klikniemy PPM na nasz przycisk i wybierzemy Go to slot, a następnie clicked() to zostaniemy przeniesieni do edytora gdzie możemy od razu bez potrzeby łączenia funkcji i sygnału przystąpić do pracy nad kodem, który ma się wykonać gdy zostanie kliknięty przycisk.

Widzimy tutaj, że aby dostać się do naszego przycisku musimy użyć wskaźnika ui->nazwa_obiektu->właściwość. W if’ie sprawdzamy wartość tekstu tak aby tekst zmieniał się na zmianę albo na „Hello World”, abo „Witaj Świecie”.

Mówiąc szczerze t nie ma tutaj nic trudnego i w ten sposób napisaliśmy nasz pierwszy program! Po kliknięciu na zieloną strzałkę Run (Ctrl + R) pojawi się nasze okno:

Zdaję sobie sprawę, że poradnik tego typu w formie tekstowej może być średnio wygodny i tego typu wiedzę najlepiej przekazuje się w formie wideo dlatego być może kolejna lekcja pojawi się właśnie w tej innej nowej wersji.

To tyle jeżeli chodzi o tą lekcję, przypominam o systemie komentarzy, dajcie znać jak się wam podoba pomysł kursu Qt.


  • Lukas

    Bardzo fajny kurs 🙂

    • Dzięki 😉

    • I tak nawiasem mówiąc jestem otwarty jeżeli chodzi o propozycje odnośnie tego co powinno się pojawić w kolejnych częściach kursu

      • maf2

        „Z kolei sygnał jest “odpowiedzią” na wysłany sygnał czyli uruchomieniem jakiejś funkcji np do zmiany tekstu przycisku, schematycznie to może wyglądać tak:”
        Wkradł się chyba błąd powinno być z kolei Slot jest odpowiedzą na sygnał.

        Co do propozycji odnośnie kursu ja bym osobiście prosił o przykłady które łączą użycie QT z kodem C++. Chodzi o to żeby to nie był tutorial sucho pisujący samo QT bo takich tutoriali jest dużo w sieci. Czyli np. po omówieniu podstaw przydałby się jakiś większy projekcik pokazujący co i jak najlepiej obiektowo czyli piszemy jakąś klasę i łączymy to z QT.

        • Tak masz rację, już poprawiam.

          Co do tego pomysłu to staram się wymyślać w miarę „życiowe” programy przy pisaniu poszczególnych części, jednak co innego jest przydatne np dla mnie i dla innych osób. Taki większy projekt musiałby być na jakiś konkretny temat, a ja raz że nie mam za bardzo pomysłu, który by fajnie pokazywał QT (ewentualnie mogę omówić program do mojego projektu Arduino)

          • marianexyx

            O! A co to za projekt na Arduino? Zabrałem się za naukę tego kursu, bo potrzebuję go właśnie do mojego projektu także na Arduino, także byłbym wdzięczny, gdyby się kiedyś tutaj takowy pojawił 😀

          • Jak już go skończę to najprawdopodobniej szczegółowy jego opis się pojawi na blogu. A czym jest sam projekt, w wielkim skrócie: to ekran na ścianę zbudowany z taśmy LED (RGB), zapalający się odpowiednio do odtwarzanej muzyki (i nie chodzi mi to o prosty wizualizer tylko coś nieco bardziej zaawansowanego), wyświetlanie tekstu i może coś jeszcze.

          • marianexyx

            Nice. Czekam zatem z niecierpliwością na rezultaty 🙂

          • Niestety obecnie na ten projekt nie mam za wiele czasu, więc radzę wstrzymać się z tą niecierpliwością 😉

  • Łukasz Woźnicki

    Witam, mam problem z uruchomieniem programu, kiedy wciskam zieloną strzałkę lub korzystam ze skrótu klawiszowego nie dzieję się nic, a po wejściu w komunikaty kompilatora dostaję taki komunikat:

    15:34:41: Uruchamianie kroków budowania dla projektu nienazwany1…

    15:34:41: Uruchamianie „C:Qt5.5mingw492_32binqmake.exe” C:UsersŁukaszDocumentsnienazwany1nienazwany1.pro -r -spec win32-g++ „CONFIG+=debug”

    Cannot find file: C:UsersŁukaszDocumentsnienazwany1nienazwany1.pro.

    15:34:41: Proces „C:Qt5.5mingw492_32binqmake.exe” zakończył się kodem wyjściowym 2.

    Błąd budowania / instalowania projektu nienazwany1 (zestaw narzędzi: Desktop Qt 5.5.0 MinGW 32bit)

    Podczas wykonywania kroku „qmake”

    15:34:41: Czas trwania: 00:00.

    • Wynika to z faktu, że kompilator nie może znaleźć pliku: C:UsersŁukaszDocumentsnienazwany1nienazwany1.pro. Należy więc ten plik dostarczyć.

      • Łukasz Woźnicki

        Tyle to i ja się domyśliłem 😉 . Problem w tym że ten plik istnieje dokładnie w tym miejscu na które wskazuje ten błąd. Próbowałem tworzyć nowe projekty pod innymi nazwami i w innych miejscach, zawsze był ten sam błąd.

        • Ja z tym błędem nie miałem do czynienia, więc jedynie co mogę zrobić to polecić ci poszukanie odpowiedzi stackoverflow lub forum Qt, gdzie najprędzej znajdziesz odpowiedź.

          • Łukasz Woźnicki

            Dzięki za pomoc gdzie szukać pomocy. Na stackoverlow znalazłem odpowiedź, w ścieżce do pliku nie mogę występować żadne znaki specjalnie, a u mnie było Ł.

  • ddarrerr

    Super poradnik, brakuje mi tylko tutaj tworzenia prostej gry multiplayer tak jak w przypadku SFML’a.

    • Gra w frameworku do GUI? To raczej nie wypali, ale faktycznie nie ruszyłem w Qt tematu socketów, które pewnie się pojawią, ale raczej w formie czatu, a nie gry (zasada ta sama, a program będzie miał większy sens).a

      • ddarrerr

        Swietnie, czekam z niecierpliwoscia. Skorzystam napewno z takiego poradnika, gdyz akurat mam projekt zrobienia prostej gry multi wlasnie qt 😉

        • Żeby nie było niejasności: „pewnie się pojawi” nie oznacza tego samego co”wkrótce”.

          • ddarrerr

            Rozumiem, szkoda.

          • pio11

            …ale lepiej napisać od razu „pewnie się nie pojawi”. /ps. też czekam na następne tutki z Qt/

          • pio wtedy miałem jeszcze zamiar zrobienia czegoś w tym stylu, obecnie już nie mam takich zamiarów

        • Hmm, twój ostatni komentarz gdzieś zaginął na Disqus, jest w komentarzach wordpressa… Doszedłem do wniosku, że to co miałoby się pojawić przez socketami jest zbyt czasochłonne więc trochę czasu by minęło zanim pojawiłyby się sockety, więc w ciągu 1-2tyg powinno się coś o tym pojawić u mnie na blogu.

  • Bartosz Pajewski

    Odkopany w zasadzie ale znalazłem w końcu jakiś dobry kurs. Pierwsze wrażenie pozytywne i już przyciski stały się jaśniejsze :p