przejście do zawartości
Jan Kończak
Narzędzia użytkownika
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Ostatnie zmiany
Menadżer multimediów
Indeks
Jesteś tutaj:
start
»
sk2
»
qt
sk2:qt
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
O [[http://www.qt.io/|Qt]] \\ Wersje frameworku ''qmake''\\ Wnętrzności: ''uic'', ''moc'' \\ Pętla zdarzeń, ''signals'', ''slots'', ''connect'' Klasy do obsługi socketów: * ''[[http://doc.qt.io/qt-5/qtcpserver.html|QTcpServer]]'' * konstruktor * ''QObject::connect'', sygnał ''[[http://doc.qt.io/qt-5/qtcpserver.html#newConnection|newConnection]]'' * ''[[http://doc.qt.io/qt-5/qtcpserver.html#listen|listen]]'' * ''[[http://doc.qt.io/qt-5/qtcpserver.html#nextPendingConnection|nextPendingConnection]]'' * ''[[http://doc.qt.io/qt-5/qtcpsocket.html|QTcpSocket]]'' * sygnał ''readyRead'' [[http://doc.qt.io/qt-5/qiodevice.html#signals|[1]]] * sygnały ''connected'', ''disconnected'' [[http://doc.qt.io/qt-5/qabstractsocket.html#signals|[2]]] * sygnał ''error'' [[http://doc.qt.io/qt-5/qabstractsocket.html#signals|[2]]] i problemy nowej składni dla ''connect'' – [[https://wiki.qt.io/New_Signal_Slot_Syntax#Asynchronous_made_easier.|[3]]] * ''[[http://doc.qt.io/qt-5/qabstractsocket.html#connectToHost|connectToHost]]'' * ''[[http://doc.qt.io/qt-5/qiodevice.html#write|write]]'' * ''[[http://doc.qt.io/qt-5/qudpsocket.html|QUdpSocket]]'' * ''[[http://doc.qt.io/qt-5/qudpsocket.html#readDatagram|readDatagram]]'' * ''[[http://doc.qt.io/qt-5/qudpsocket.html#writeDatagram|writeDatagram]]'' //Zadanie 1:// - Stwórz projet //Qt Widgets Application//, wybierz ''QWidget'' jako klasę bazową domyślnie tworzonej klasy - Dodaj do pliku projektu (''*.qmake''):<code qmake> QT += network CONFIG += c++11</code> - 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, [[https://pl.wikipedia.org/wiki/Focus_(GUI)|focus]], enabled / read-only) - Zbuduj projekt (inaczej IDE nie będzie podpowiadać nazw) - Dodaj do klasy obiekt opakowujący gniazdo TCP (''QTcpSocket''), jeśli trzeba stwórz go w konstruktorze - 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()'' - 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ń) - Obsłuż wysyłanie wiadomości IP multicast - przypomnienie \\ [[http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml|Pula adresów]] (224/4), lokalne adresy (224/24), [[https://tools.ietf.org/html/rfc2365|Organization-Local Scope]] \\ IGMP \\ Użycie IP multicast w BSD socket API: [[sk2:multicast_example]] //Zadanie 2a:// Wybierzcie wspólnie adres i port grupy multicastowej \\ //Zadanie 2b:// Zmodyfikuj poprzedni projekt: - Pole na adres hosta zastąp polem na adres multicastowy - Gniazdo TCP zastąp gniazdem UDP (''QUdpSocket'') - Zastąp łączenie się z wybranym adresem: * wywołaniem ''bind'' (metodę na obiekcie, nie wywołanie systemowe) dla ''QHostAddress::AnyIPv4'' i wybranego portu, \\ <html><small></html> Jeśli chcesz testować program lokalnie uruchamiając go kilka razy, wykonaj bind w trybie ''QUdpSocket::ShareAddress''<html></small></html> * dołączeniem do grupy multicastowej ''joinMulticastGroup'' pod wybrany adres IP grupy. - Pamiętaj że UDP jest bezpołączeniowe – nie wystąpi zdarzenie ''connected'' ani ''disconnected'' <html><small></html>(chyba że używany jest tryb pseudopołączeniowy; wtedy to pierwsze jest emitowane przy ustalaniu adresu zdanego)<html></small></html> - Odczyt z gniazda zastąp przez ''receiveDatagram'' lub ''readDatagram'' (rozmiar datagramu poznasz metodą ''pendingDatagramSize'')\\ - 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
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Złóż / rozłóż wszystko
Do góry