Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Poprzednia wersja Nowa wersja | Poprzednia wersja Ostatnia wersja Both sides next revision | ||
sk2:qt [2021/12/22 21:19] jkonczak [Sieć w Qt] |
sk2:qt [2022/11/28 15:41] jkonczak [Wprowadzenie] |
||
---|---|---|---|
Linia 18: | Linia 18: | ||
=== O Qt === | === O Qt === | ||
- | [[https://www.qt.io/product|[1]]] [[https://pl.wikipedia.org/wiki/Qt|[2]]] | + | Qt to framework (zestaw bibliotek i narzędzi) dla języka C+''''+. Duży nacisk w Qt jest położony na budowę aplikacji z graficznym interfejsem użytkownika i tworzenie wieloplatformowego kodu. \\ |
+ | [[https://www.qt.io/product|Strona produktu]] [[https://wiki.qt.io/About_Qt|Strona "O Qt" w wiki Qt]] [[https://pl.wikipedia.org/wiki/Qt|Polska Wikipedia o Qt]] | ||
=== Narzędzia === | === Narzędzia === | ||
- | Qt do wersji 5 jako podstawowego systemu budowania używa dostarczonego z Qt programu ''[[http://doc.qt.io/qt-5/qmake-manual.html|qmake]]''. Dodatkowo Qt 5 wspiera oficjalnie CMake (nieoficjalnie Qt jest wspierane też przez inne systemy budowania).\\ | + | Qt do wersji 5 jako podstawowego systemu budowania używa dostarczonego z Qt programu ''[[https://doc.qt.io/qt-5/qmake-manual.html|qmake]]''. Dodatkowo Qt 5 wspiera oficjalnie CMake (nieoficjalnie Qt jest wspierane też przez inne systemy budowania).\\ |
Qt od wersji 6 jako podstawowego systemu budowania używa CMake ([[https://doc.qt.io/qt-6/cmake-manual.html|dokumentacja dla Qt]]) nie zaprzestając rozwoju qmake. | Qt od wersji 6 jako podstawowego systemu budowania używa CMake ([[https://doc.qt.io/qt-6/cmake-manual.html|dokumentacja dla Qt]]) nie zaprzestając rozwoju qmake. | ||
- | Do graficznego projektowania GUI opartego o [[https://pl.wikipedia.org/wiki/Wid%C5%BCet|widżety]] dostarczany jest program ''[[http://doc.qt.io/qt-5/qtdesigner-manual.html|designer]]'', generujący pliki w formacie XML. Następnie programem ''[[http://doc.qt.io/qt-5/uic.html|uic]]'' są one konwertowane na kod w C+''''+. \\ | + | Do graficznego projektowania GUI opartego o [[https://pl.wikipedia.org/wiki/Wid%C5%BCet|widżety]] dostarczany jest program ''[[https://doc.qt.io/qt-6/qtdesigner-manual.html|designer]]'', generujący pliki w formacie XML. Następnie programem ''[[https://doc.qt.io/qt-6/uic.html|uic]]'' są one automatycznie konwertowane na kod w C+''''+. \\ |
<html><small></html>Qt dostarcza też silnik [[https://doc.qt.io/qt-6/qmlapplications.html|języka QML]] i biblioteki [[https://doc.qt.io/qt-6/qtquickcontrols-index.html|Qt Quick]] do budowy GUI w QML. \\ Ponadto ''assistant'' pozwala przeglądać dokumentację, ''linguist'' w łatwy sposób umożliwia tłumaczenie programu. \\ Częścią SDK do Qt jest też IDE ''qtcreator''.<html></small></html> | <html><small></html>Qt dostarcza też silnik [[https://doc.qt.io/qt-6/qmlapplications.html|języka QML]] i biblioteki [[https://doc.qt.io/qt-6/qtquickcontrols-index.html|Qt Quick]] do budowy GUI w QML. \\ Ponadto ''assistant'' pozwala przeglądać dokumentację, ''linguist'' w łatwy sposób umożliwia tłumaczenie programu. \\ Częścią SDK do Qt jest też IDE ''qtcreator''.<html></small></html> | ||
=== Pętla zdarzeń, sygnały i sloty === | === Pętla zdarzeń, sygnały i sloty === | ||
- | Typowe aplikacje w Qt wykorzystują [[http://doc.qt.io/qt-5/qapplication.html#exec|pętlę zdarzeń]]. Obiekty mogą zażądać obsługi zdarzenia (zdarzenie w Qt nazywa się ''signal''), a programista za pomocą funkcji ''connect'' określa jaka funkcja (nazywana w Qt ''slot'') ma być wywoływana gdy wystąpi podane zdarzenie ([[http://doc.qt.io/qt-5/signalsandslots.html|signals and slots]]). | + | Typowe aplikacje w Qt wykorzystują [[https://doc.qt.io/qt-6/qapplication.html#exec|pętlę zdarzeń]]. Obiekty mogą zażądać obsługi zdarzenia (zdarzenie w Qt nazywa się ''signal''), a programista za pomocą funkcji ''connect'' określa jaka funkcja (nazywana w Qt ''slot'') ma być wywoływana gdy wystąpi podane zdarzenie ([[https://doc.qt.io/qt-6/signalsandslots.html|signals and slots]]). |
\\ | \\ | ||
- | Qt korzysta z dodatkowego preprocesora ''[[http://doc.qt.io/qt-5/why-moc.html|moc]]''. Od Qt5 użycie ''moc'' można pominąć, jeśli korzysta się z nowej składni funkcji ''connect'' i nie definiuje własnych sygnałów. | + | Qt korzysta z dodatkowego preprocesora ''[[https://doc.qt.io/qt-6/why-moc.html|moc]]''. Od Qt5 użycie ''moc'' można pominąć, jeśli korzysta się z nowej składni funkcji ''connect'' i nie definiuje własnych sygnałów. |
\\ | \\ | ||
<html><small></html>Zarówno ''uic'' jak i ''moc'' są wywoływane automatycznie przez system budowania qmake. W cmake trzeba włączyć opcje [[https://cmake.org/cmake/help/latest/prop_tgt/AUTOUIC.html|AUTOUIC]] i [[https://cmake.org/cmake/help/latest/prop_tgt/AUTOMOC.html|AUTOMOC]].<html></small></html> | <html><small></html>Zarówno ''uic'' jak i ''moc'' są wywoływane automatycznie przez system budowania qmake. W cmake trzeba włączyć opcje [[https://cmake.org/cmake/help/latest/prop_tgt/AUTOUIC.html|AUTOUIC]] i [[https://cmake.org/cmake/help/latest/prop_tgt/AUTOMOC.html|AUTOMOC]].<html></small></html> | ||
Linia 162: | Linia 163: | ||
Użycie IP multicast w BSD socket API: [[sk2:multicast_example]]\\ | Użycie IP multicast w BSD socket API: [[sk2:multicast_example]]\\ | ||
Lista grup mcastowych do których jest zapisany komputer: ''ip maddr'' lub ''netstat -ng'' lub ''cat /proc/net/igmp'' | Lista grup mcastowych do których jest zapisany komputer: ''ip maddr'' lub ''netstat -ng'' lub ''cat /proc/net/igmp'' | ||
- | ++++ Użycie programu socat do testowania multicastu: | <code bash> | + | ++++ Użycie programu socat do testowania multicastu: | |
+ | Zajęcia w laboratorium: | ||
+ | <code bash> | ||
+ | socat UDP-DATAGRAM:239.0.0.1:2000,reuseaddr,bind=0.0.0.0:2000,ip-add-membership=239.0.0.1:enp0s3 STDIO | ||
+ | |||
+ | # UDP-DATAGRAM:239.0.0.1:2000 → wysyłaj datagramy do podanego adresu (239.0.0.1:2000) i odbieraj co przyjdzie | ||
+ | # reuseaddr → włącze SO_REUSEADDR; pozwala wielu programom na tym samym komputerze używać tego samego portu do mcastu | ||
+ | # ip-add-membership=239.0.0.1:enp0s3 → dołącza do grupy mcastowej 239.0.0.1 na urządzeniu enp0s3 | ||
+ | # bind=0.0.0.0:2000 → wykonaj bind na podany adres; pod tym adresem będą odbierane datagramy | ||
+ | </code> | ||
+ | |||
+ | Zajęcia zdalne: | ||
+ | <code bash> | ||
socat UDP-DATAGRAM:239.0.0.1:2000,reuseaddr,bind=0.0.0.0:2000,ip-add-membership=239.0.0.1:tap0,ip-multicast-if=10.0.9.X STDIO | socat UDP-DATAGRAM:239.0.0.1:2000,reuseaddr,bind=0.0.0.0:2000,ip-add-membership=239.0.0.1:tap0,ip-multicast-if=10.0.9.X STDIO | ||
+ | |||
# UDP-DATAGRAM:239.0.0.1:2000 → wysyłaj datagramy do podanego adresu (239.0.0.1:2000) i odbieraj co przyjdzie | # UDP-DATAGRAM:239.0.0.1:2000 → wysyłaj datagramy do podanego adresu (239.0.0.1:2000) i odbieraj co przyjdzie | ||
# reuseaddr → włącze SO_REUSEADDR; pozwala wielu programom na tym samym komputerze używać tego samego portu do mcastu | # reuseaddr → włącze SO_REUSEADDR; pozwala wielu programom na tym samym komputerze używać tego samego portu do mcastu | ||
Linia 170: | Linia 184: | ||
# ip-multicast-if=10.0.9.X → nakazuje wysyłać wiadomości do grupy multicastowej z podanego adresu | # ip-multicast-if=10.0.9.X → nakazuje wysyłać wiadomości do grupy multicastowej z podanego adresu | ||
</code> | </code> | ||
+ | |||
+ | |||
++++ | ++++ | ||
<html></small></html> | <html></small></html> |