QDataStream &operator<<里写
时间: 2024-10-23 08:06:31 浏览: 26
`QDataStream &operator<<(QDataStream &out, const T &obj)` 这个重载操作符是 Qt 中的一种特性,它允许我们将对象 `T` 直接写入到 `QDataStream`(流式数据输入/输出)中。`QDataStream` 是 Qt 提供的一个库,用于在内存、文件或其他流之间高效地进行数据的读写。
当你在一个 `QDataStream` 类型上看到 `&operator<<`,这意味着你可以通过 `<<` 操作符向流中添加对象,就像它是普通的 `<<` 运算符一样。例如,对于像这样的结构体或类:
```cpp
class MyPair {
public:
std::string key;
std::string value;
friend QDataStream &operator<<(QDataStream &out, const MyPair &pair);
};
QDataStream &operator<<(QDataStream &out, const MyPair &pair) {
out << pair.key << pair.value;
return out;
}
```
在这个例子中,`MyPair` 的实例可以直接写入到 `QDataStream` 中,因为 `operator<<` 被定义为了接受一个 `QDataStream` 和一个 `MyPair` 参数,并依次写出 `key` 和 `value`。
使用这个重载的操作符,你可以像下面这样序列化和反序列化 `MyPair` 对象:
```cpp
void saveToFile(const std::vector<MyPair> &pairs, const QString &filename) {
QDataStream stream(QIODevice::WriteOnly, QFile(filename));
for (const auto &pair : pairs) {
stream << pair;
}
stream.device()->flush();
}
std::vector<MyPair> loadFromFile(const QString &filename) {
std::vector<MyPair> pairs;
QDataStream stream(QIODevice::ReadOnly, QFile(filename));
MyPair pair;
while (stream.read(&pair)) {
pairs.push_back(pair);
}
return pairs;
}
```
阅读全文