Wykład 4 p. 1/1 Oprogramowanie i wykorzystanie stacji roboczych Wykład 4 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska
Obsługa sieci Wykład 4 p. 2/1 W bibliotece Qt do obsługi protokołów FTP i HTTP służa klasy QFtp i QHttp. Zostały one zbudowane w oparciu o klasę QSocket, która opakowuje gniazdka w domenie TCP. Klasa QSocket dziedziczy po klasie QSocketDevice, która mapuje wywołania funkcji bezpośrednio do (specyficznej dla danej architektury) API sieciowego. Połaczenia przy wykorzystaniu klasy QSocketDevice moga odbywać się zarówno po protokole TCP, jak również UDP.
QHttp Wykład 4 p. 3/1 Klasa QHttp implementuje protokół HTTP po stronie klienta. Zawiera zbiór metod realizujacych operacje HTTP, w tym metody get(), post(). Polecenia HTTP wykonywane sa asynchronicznie. Powrót z metody realizujacej dana operację następuje bezpośrednio po jej wywołaniu. Polecenie jest wykonywane w tle. Po zakończeniu wykonywania polecenia sa generowane sygnały requestfinished(int id, bool error), done(bool).
QHttp - przykład I Wykład 4 p. 4/1 #include <QApplication> #include "getfile.h" int main(int argc, char** argv) { QApplication app(argc, argv); GetFile getfile; getfile.resize(210, 70); getfile.show(); app.exec(); if (getfile.isok()) execlp("acroread", "acroread", "/tmp/slides.pdf", NULL); } return 0;
QHttp - przykład II Wykład 4 p. 5/1 class GetFile: public QWidget { Q_OBJECT public: GetFile(QWidget *parent = 0); bool IsOk() const; public slots: void Done(bool); void Show(); private: QHttp http; QFile file; QSpinBox *number; bool ok; };
QHttp - przykład III Wykład 4 p. 6/1 GetFile::GetFile(QWidget *parent): QWidget(parent), ok(false) { number = new QSpinBox(this); number->setvalue(1); number->setgeometry(20, 20, 50, 30); QPushButton *show = new QPushButton("Show", this); show->setgeometry(90, 20, 100, 30); } connect(show, SIGNAL(clicked()), this, SLOT(Show()));
QHttp - przykład IV Wykład 4 p. 7/1 void GetFile::Done(bool error) { ok =!error; file.close(); qapp->quit(); } void GetFile::Show() { file.setfilename("/tmp/slides.pdf"); http.sethost("icis.pcz.pl"); QString filename; filename = QString("/~olas/osr/wyklad%1.pdf").arg(number->value()); http.get(filename, &file); connect(&http, SIGNAL(done(bool)), this, SLOT(Done(bool))); }
Internacjonalizacja i lokalizacja Wykład 4 p. 8/1 Internacjonalizacja (umiędzynaradawianie) oprogramowania, czyli wprowadzenie do programu możliwości obsługi wyświetlania komunikatów i dokumentacji w wielu różnych językach - oznaczany przez skrót i18n. Lokalizacja oprogramowania, czyli przetłumaczenie komunikatów w programie na dany język lub dialekt, a także dostosowanie programu do konwencji obowiazuj acych w danym języku/dialekcie - między innymi sposobu sortowania liter w alfabecie, używanych jednostek miary, albo formatów dat - oznaczany przez skrót i10n.
Internacjonalizacja (I) Wykład 4 p. 9/1 Internacjonalizacja w Qt jest realizowana przy wykorzystaniu dwóch typów plików ts i qm. Pliki ts sa wykorzystywane podczas tworzenia oprogramowania (format XML). Pliki qm sa plikami binarnymi używanymi w czasie uruchamiania aplikacji. Powstaja one na podstawie plików ts w etapie translacji (releasing). W przypadku korzystania z narzędzia qmake w celu dodania nowej wersji językowej aplikacji należy do pliku projektu (rozszerzenie pro) dodać makrodefinicję TRANSLATIONS += paint_pl_pl.ts
Wykład 4 p. 10/1 Internacjonalizacja (II) Kolejnym etapem jest wydobycie z plików projektu wszystkich elementów, które moga się różnić w zależności od języka. Elementy takie (łańcuchy) sa automatycznie identyfikowane w plikach przez narzędzie lupdate po umieszczeniu ich w makrze tr() - (edit->settext(tr("hello", "Tekst powitalny"))): lupdate paint.pro <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS><TS version="1.1"> <context> <name>mywidget</name> <message> <location filename="mywidget.cpp" line="17"/> <source>hello</source> <comment>tekst powitalny</comment> <translation type="unfinished"></translation> </message> </context> </TS>
Qt Linguist Wykład 4 p. 11/1
Wykład 4 p. 12/1 The Model-View Framework Wzorzec projektowy model-widok jest bardzo często wykorzystywany w tworzeniu oprogramowania. W standardowym wzorcu projektowym MVC (model-view controller) model opisuje dane, widok służy do reprezentowania (renderowania) modelu (danych), natomiast zadaniem kontrolera jest zarzadzanie modyfikacja danych. W bibliotece Qt zrezygnowano z komponentu kontrolera.
Wykład 4 p. 13/1 The Model-View Framework W bibliotece Qt modele sa używane do opisu takich struktur jak listy, tabele i drzewa.