[Kurs Qt] Komunikacja ze stronami www

W dzisiejszym dość krótkim i prostym z założenia programie nauczymy się w jaki sposób nasz program może komunikować się ze stronami www.

Do dzisiejszego programu wykorzystamy serwis cube scrambler, którego zadaniem jest tworzenia algorytmu do mieszania kostki Rubika.

Przygotowanie


Co warto zaznaczyć trzeba nieco nasz projekt przygotować przed rozpoczęciem właściwej pracy.

W pliku pro doklejamy linię kodu:

QT += webkit webkitwidgets

Musimy także zaincludować nowe biblioteki (QWebElement oraz QWebFrame):

Następnie z paska narzędzi Qt Creator‚a wybieramy Build -> run qmake. Jest to wymagane po każdym manualnym modyfikowaniu plików *.pro.

Może się też zdarzyć w dalszej części tego kursu, że nie będziesz mógł wczytać strony, będzie to wymagało doinstalowania dodatkowych plików (niestety nie pamiętam dokładnie natury błędu więc jedynie co mogę zrobić to odsyłać was do google’a, ewentualnie zachęcam do podzielenia się tym błędem w komentarzu, abym mógł dopisać tutaj jego rozwiązanie).

Dopełnienie wprowadzenia


 

Dodam jeszcze tutaj serię linii, z których można skorzystać, aby przyspieszyć wczytywanie strony (wklejamy je do konstruktora MainWindow):

Przygotowanie sygnałów i slotów


Kolejną rzeczą jaką musimy zrobić to przygotować sygnały: wciśnięcia przycisku oraz drugi, który będzie nam mówił o tym czy załadowano już stronę.

Pierwszy generujemy poprzez stworzenie go poprzez kliknięciu PPM na nasz przycisk->Go to slot…->clicked().

Drugi dodamy manualnie poprzez dodanie go w pliku nagłówkowym mainwindow, gdzie w prywatnych slotach dodajemy void zaladowano().

Przy okazji dodajemy wraz z plikiem nagłówkowym QWebView obiekt tej klasy w QWebView webView.

Następnie w pliku cpp tej klasy w konstruktorze łączymy nasz slot, który ma coś robić po wczytaniu strony.

connect(&webView,SIGNAL(loadFinished(bool)),this,SLOT(zaladowano()) );

Pierwszy slot: wczytywanie strony


Pierwszy slotem, który coś wykona będzie wciśnięcie przycisku, gdzie napiszemy prosty kod, którego zadaniem będzie rozpoczęcie wczytywania strony. Kod jest na tyle dobrze skomentowany, że nie będę go tłumaczył jeszcze tutaj.

Drugi slot: wczytano stronę, pobieranie danych ze strony


Ten slot jest aktywowany gdy już zostanie wczytana strona, może to chwilę potrwać, a program może się w tym momencie lekko przywiesić. Co ważne aby ten kod działał poprawnie musimy zostawić JavaScript włączone, więc z tych linii co podałem na samym początku, że mogą przyspieszyć wczytanie strony musimy usunąć (tą właśnie od JavaScript).

Jeżeli się zastanawiacie, skąd wiedziałem jak się nazywa element od scramble’a na stronie to przypominam, że kod HTML jest jawny co oznacza, że każdy może go zobaczyć. Więc wystarczy że klikniecie PPM na interesującym was obiekcie i wybierzecie zbadaj element.

Poprzez wyszukanie odpowiednich atrybutów otrzymujemy zawartość pomiędzy szukanymi przez nas tagami.

Edytowanie elementów


Mimo, że nasz program tego nie wykorzysta to nieco wspomnę o edytowaniu wartości elementów. Polecam także zajrzeć do dokumentacji, gdzie wszystko jest ładnie opisane.

W przypadku zmienienia wartości jakiegoś elementu (np textboxa) musimy na początku znaleźć go tak jak w przypadku wczytywania elementów, następnie modyfikujemy jego wartość w następujący sposób:

Nie jest to specjalnie skomplikowane, uruchamianie skryptu (czytaj przycisku) wygląda podobnie:

To tyle ode mnie, oczywiście kod jest już dostępny w wersji na [GitHub].


  • Nevea

    Kiedy nowa część kursu QT?

    • Jest aktualnie w trakcie pisania, lecz pojawi się dopiero gdzieś w przyszłym tygodniu. Akurat w tym tygodniu nie miałem czasu na kodzenie czegokolwiek i dopiero wczoraj miałem czas na napisanie fragmentu nowej lekcji. Na twitterze wrzucam tego typu informacje/małe ogłoszenia.

  • DatQt

    Dobry tutorial ale da się coś zrobić z tymi .dll? Za zaincludowanie dwóch biblotek do programu trzeba do niego wpakować dodatkowe 40mb dllek :_:

    • To jest cena, którą trzeba zapłacić za korzystanie z Qt Creatora 😛

      • DatQt

        Ehh same podstawowe dllki zajmują z te 40mb a tutaj trzeba kolejne 40. 🙁

  • Mrowka

    Właśnie mam wyżej wspomniany błąd (chyba , że miałeś inny na myśli) brak biblioteki webkit. jest jakiś mechanizm dodawania bibliotek czy coś?