Understanding File Types in Qt
Qt categorizes files into two primary types:
1. Text Files
Files containing human-readable text characters that can be viewed and edited in any text editor.
2. Data Files
Files containing raw binary data stored in compact binary format.
Basic File Operations with QFile
The QFile class provides direct support for both text and binary file operations. The following example demonstrates reading and writing binary data using QFile:
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QFile file("C:/Users/Developer/Desktop/sample.hex");
if (file.open(QIODevice::WriteOnly))
{
QString identifier = "Developer";
double measurement = 2.71;
file.write(identifier.toStdString().c_str());
file.write(reinterpret_cast<char*>(&measurement), sizeof(measurement));
file.close();
}
if (file.open(QIODevice::ReadOnly))
{
QString identifier = "";
double measurement = 0;
identifier = QString(file.read(10));
file.read(reinterpret_cast<char*>(&measurement), sizeof(measurement));
file.close();
qDebug() << identifier;
qDebug() << measurement;
}
return a.exec();
}
</div>**main.cpp**</div>Text Streams and Data Streams
-----------------------------
Qt provides specialized helper classes that significantly simplify file I/O operations:
**1. QTextStream**
Converts all data to human-readable text format before writing to file.
**2. QDataStream**
Converts data to binary format based on data type specifications.
**3. Usage Pattern**
Both stream classes follow a similar workflow: create QFile object, open file, perform I/O operations, then close file.
**Important Considerations**
- Data stream format may vary betwean different Qt versions
- When sharing data files between applications built with different Qt versions, version compatibility must be addressed
<div><div>```
#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QTextStream>
#include <QDataStream>
#include <QString>
#include <QFile>
void textstream(QString filepath)
{
QFile file(filepath);
if (file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QTextStream output(&file);
output << QString("QtAcademy") << endl;
output << 9.87 << endl;
file.close();
}
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream input(&file);
while (!input.atEnd())
{
qDebug() << input.readLine();
}
file.close();
}
}
void datastream(QString filepath)
{
QFile file(filepath);
if (file.open(QIODevice::WriteOnly))
{
QDataStream output(&file);
output.setVersion(QDataStream::Qt_4_7);
output << QString("QtAcademy");
output << 9.87;
file.close();
}
if (file.open(QIODevice::ReadOnly))
{
QDataStream input(&file);
QString text = "";
double number = 0;
input.setVersion(QDataStream::Qt_4_7);
input >> text;
input >> number;
file.close();
qDebug() << text;
qDebug() << number;
}
}
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
textstream("F:/Qt/lesson33/text.txt");
datastream("F:/Qt/lesson33/text.dat");
return app.exec();
}
- Qt's file helper classes streamline both text and binary file operations
QTextStreamexcels at rapid text data reading and writingQDataStreamprovides efficient binary data handling capabilities- The binary format used by
QDataStreamis tied to the Qt version - When exchanging data files across different Qt versions, explicitly set the stream version to ensure compatibility