Proste operacje IO w qt4

revcorey

Proste operacje I/O w qt4

</span>

Wstęp

</span>
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
sa1.jpeg

Operacje Binarne

</span>
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
plik mainwindows.cpp</p>
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.

Zapisywanie/Odczytywanie Tekstu

</span>
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
mainwindow.cpp</p>
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ś
Strumień zapisuje i odczytuje tekst z lokalnym kodowaniem, za pomocą odpowiednich funkcji w klasie QTextStream możemy to zmienić.
3.Odczytujemy tu dość ważna uwaga, jeśli użyliśmy w zapisywaniu do pliku połączenia kaskadowego to out << „rok” << „wiek”; to kiedy użyjemy do odczytu takiej składni
in >> 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.

Podsumowanie

</span>
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.</p>

0 komentarzy