Programowanie w języku C/C++

Proste operacje IO w qt4

<center>

Proste operacje I/O w qt4

</center>
<center>

Wstęp

</center>
W programach komputerowych ważne jest aby program mógł zapisać wyniki swojej pracy a także je odtworzyć. Świetnym przykładem niech będzie edytor tekstu który powinien umieć zapisać dokument a także ponownie go otworzyć. My w tym celu wykorzystamy język C++ i bibliotekę Qt4. Zaczniemy od stworzenia w qt designerze odpowiedniej formy, zakładam że mamy już doświadczenie małe z qt4 ,więc nie będzie potrzeba wyjaśniania co i jak

<center>

Operacje Binarne

</center>
Strumień danych binarnych jest całkowicie nie zależny od platformy na jakiej pracujemy.
Czas na kawałek kodu
Źródło programu src_1.zip (3,58 KB)
plik mainwindows.cpp
void MainWindow::save(){
QFile file("test.txt");                //1
file.open(QIODevice::WriteOnly);        //2
QDataStream out(&file);        //3
out.setVersion(QDataStream::Qt_4_5);        //4
out << ui->edit->toPlainText();        //5
}
void MainWindow::open(){
QFile file("test.txt");                //6
file.open(QIODevice::ReadOnly);        //7
QDataStream in(&file);        //8
QString str;
in.setVersion(QDataStream::Qt_4_5);
in >> str;        //9
ui->edit->setPlainText(str);         //10
}

Nasza klasa MainWindow dziedziczy odpowiednio po formie i klasie QMainWindow.
1.W tym miejscu tworzymy obiekt QFile który umożliwi nam zapis do pliku test.txt
2. Ustawiamy tak strumień aby był on tylko do zapisu
3.Przekazujemy obiektowi QDataStream  referencję do naszego pliku.
4.To jest dość ciekawa linia, służy ona do ustawiania odpowiedniej wersji strumienia. Zachodzi taka potrzeba gdyż wraz z rozwojem biblioteki qt zachodziła potrzeba zmian w api. Tu taj należy zapamiętać iż plik zapisywany w danej wersji biblioteki(w tym wypadku 4.5) musi być odtwarzany binarnie także w takiej samej wersji. W moim przypadku ustawiłem taką samą wersję z jakich korzystam jednak mogło by się okazać że mój program będzie odczytywał pliki binarnie które zostały zapisane przez inny program korzystający np. z wersji 4.2 ,wtedy muszę wymusić  to w oto taki sposób nazwa_strumienia.setVersion(QDataStream::Qt_4_2);
5.zapisuje w oto taki sposób         strumień < coś do zapisania w moim przypadku out <  ui->edit->toPlainText();  
Tutaj ważna uwaga gdy coś serializujemy musimy użyć odpowiednich typów dla danych np.
chcemy zapisać liczbę 150
out < (qint32)150;
Szczegółową listę typów znajdziemy w dokumentacji w rozdziale  Format of the QDataStream Operators
       
6.Kolejna funkcja której zadaniem jest otwieranie pliku. Tu analogicznie do punktu 1
7.Analogicznie do punktu 2 tylko ustawiamy do otwierania.
8.Analogicznie do punktu 3
9. Oto w ten sposób wczytujemy do zmiennych nasze dane w tym wypadku Qstring
10.Ustawiamy wczytany tekst w naszym programie.
<center>

Zapisywanie/Odczytywanie Tekstu

</center>
Zapisywanie tekstu daje więcej możliwości m.in używanie innych formatów tekstowych takich jak HTML czy XML itd.
Źródło programu src_2.zip (2,62 KB)
mainwindow.cpp
void MainWindow::save(){
QFile file("test2.txt");
if (file.open(QFile::WriteOnly)) { 
QTextStream out(&file);        //1
out << ui->edit->toPlainText();        //2
}
}
void MainWindow::open(){
QFile file("test2.txt");
if (file.open(QFile::ReadOnly)) {
QTextStream in(&file);
QString str;
in >> str;        //3
ui->edit->setPlainText(str3);
}
}

1.Ustawiamy strumień na plik
2.Zapisujemy do pliku oczywiście istnieje możliwość łączenia kaskadowego out < coś <coś zapisuje="zapisuje" i="i" odczytuje="odczytuje" tekst="tekst" z="z" lokalnym="lokalnym" kodowaniem,="kodowaniem," za="za" pomocą="pomocą" odpowiednich="odpowiednich" funkcji="funkcji" w="w" klasie="klasie" możemy="możemy" to="to" zmienić.="zmienić." tu="tu" dość="dość" ważna="ważna" uwaga,="uwaga," jeśli="jeśli" użyliśmy="użyliśmy" zapisywaniu="zapisywaniu" do="do" pliku="pliku" połączenia="połączenia" kaskadowego="kaskadowego" out="out" <<="&lt;&lt;" „rok”="„rok”" „wiek”;="„wiek”;" kiedy="kiedy" użyjemy="użyjemy" odczytu="odczytu" takiej="takiej" składni="składni" in="in" strumień="Strumień" qtextstream="QTextStream" 3.odczytujemy="3.Odczytujemy">> string1 >> string2;
to do zmiennej string1 wczytane zostanie słowo rok a do string2 wiek. W klasie istnieją także funkcje które pozwalają czytać linia po linii a nawet naraz wszystko jest to stosowane do różnej maści parserów. Sam strumień ma wiele ustawień zachęcam do przejrzenia dokumentacji.
<center>

Podsumowanie

</center>
Operacje I/O przy użyciu qt4 nie są trudne do przeprowadzenia. To było tylko wprowadzenie  aby pogłębić wiedzę w tym temacie zapraszam do świetnej dokumentacji biblioteki qt4 no i oczywiście eksperymentowania.