Narzędzia użytkownika

Narzędzia witryny


Pasek boczny

sk2:qt

To jest stara wersja strony!


O Qt
Wersje frameworku

qmake
Wnętrzności: uic, moc
Pętla zdarzeń, signals, slots, connect

Klasy do obsługi socketów:

Zadanie 1:

  1. Stwórz projet Qt Widgets Application, wybierz QWidget jako klasę bazową domyślnie tworzonej klasy
  2. Dodaj do pliku projektu (*.qmake):
    QT += network
    CONFIG += c++11
  3. Przygotuj GUI:
    • stwórz widgety na adres docelowy i numer portu (np. QLineEdit i QSpinBox) i (opcjonalnie) przycisk do nawiązywania połączenia (QPushButton)
    • stwórz widget na wyświetlanie wymienianych wiadomości (np. QTextEdit) i na wpisywanie wiadomości do wysłania (np. QLineEdit)
    • dopracuj GUI (nazwy widgetów, układ, focus, enabled / read-only)
  4. Zbuduj projekt (inaczej IDE nie będzie podpowiadać nazw)
  5. Dodaj do klasy obiekt opakowujący gniazdo TCP (QTcpSocket), jeśli trzeba stwórz go w konstruktorze
  6. Połącz dla utworzonego gniazda zdarzenia: connected, disconnected i error (lub zdarzenie stateChanged)
    Dla zdarzenia error uważaj na składnię
    • klasa QTextEdit ma metodę append() (thread-safe)
    • tekst z QLineEdit wyciąga się metodą text()
  7. Dodaj obsługę zdarzenia naciśnięcia przycisku nawiązujacego połączenie (lub naciśnięcia enter w polu z adresem hosta):
    • wartość z QSpinBox wyciąga się metodą value()
    • połączenie w klasie QTcpSocket nawiązuje się (asynchronicznie) używając metody connectToHost (metody connect i disconnect są zajęte przez obsługę zdarzeń)
  8. Obsłuż wysyłanie wiadomości

IP multicast - przypomnienie
Pula adresów (224/4), lokalne adresy (224/24), Organization-Local Scope
IGMP
Użycie IP multicast w BSD socket API: multicast_example

Zadanie 2a: Wybierzcie wspólnie adres i port grupy multicastowej
Zadanie 2b: Zmodyfikuj poprzedni projekt:

  1. Pole na adres hosta zastąp polem na adres multicastowy
  2. Gniazdo TCP zastąp gniazdem UDP (QUdpSocket)
  3. Zastąp łączenie się z wybranym adresem:
    • wywołaniem bind (metodę na obiekcie, nie wywołanie systemowe) dla QHostAddress::AnyIPv4 i wybranego portu,
      Jeśli chcesz testować program lokalnie uruchamiając go kilka razy, wykonaj bind w trybie QUdpSocket::ShareAddress
    • dołączeniem do grupy multicastowej joinMulticastGroup pod wybrany adres IP grupy.
  4. Pamiętaj że UDP jest bezpołączeniowe – nie wystąpi zdarzenie connected ani disconnected (chyba że używany jest tryb pseudopołączeniowy; wtedy to pierwsze jest emitowane przy ustalaniu adresu zdanego)
  5. Odczyt z gniazda zastąp przez receiveDatagram lub readDatagram (rozmiar datagramu poznasz metodą pendingDatagramSize)
  6. Wysłanie danych wykonuj metodą writeDatagram na adres grupy

W Qt adres hosta reprezentuje klasa QHostAddress. Zmiana ciągu znaków (QString) na adres hosta: QHostAddress(str) Uwaga: funkcje read, readAll i write dla QUdpSocket mogą być używane tylko w trybie pseudopołączeniowym.

sk2/qt.1510511261.txt.gz · ostatnio zmienione: 2017/11/12 19:27 przez jkonczak