当前位置: 首页 > news >正文

把 `QVector<QPointF>` 写入文件:三种风格、三段独立可编译的完整代码

在 GUI 或数值程序里,经常需要把一组二维点 QPointF 连同它们到原点 O(0,0) 的距离持久化。
距离公式为
di=xi2+yi2 d_i = \sqrt{x_i^{2}+y_i^{2}} di=xi2+yi2
下面给出 三段完全独立、可直接编译运行 的示例,分别对应

  1. Qt 原生文件类 QFile + QTextStream
  2. 仅使用 标准输出流 std::cout,方便管道或重定向
  3. 使用 标准文件流 std::ofstream

每段代码都包含

  • 自包含的 main
  • 默认生成若干测试点
  • 按行输出 x,y,distance,无外部依赖(除 Qt 头文件外)

① Qt 风:QFile + QTextStream

// file_qt.cpp
#include <QVector>
#include <QPointF>
#include <QFile>
#include <QTextStream>
#include <QtMath>   // Qt 6: qSqrt;Qt 5 亦可
#include <iostream>int main()
{// 构造演示数据QVector<QPointF> pts{{1.5, 2.0}, {-3, 4}, {0, 0}, {5.7, -8.2}};QFile f("points_qt.txt");if (!f.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)){std::cerr << "open failed\n";return 1;}QTextStream out(&f);out.setRealNumberPrecision(6);out.setRealNumberNotation(QTextStream::FixedNotation);for (const QPointF &p : pts){qreal d = qSqrt(p.x() * p.x() + p.y() * p.y());out << p.x() << ',' << p.y() << ',' << d << Qt::endl;}f.close();return 0;
}

编译

g++ file_qt.cpp -std=c++17 -fPIC $(pkg-config --cflags --libs Qt6Core) -o file_qt
./file_qt

② 极简风:仅 std::cout

将数据直接写到 标准输出,由 shell 重定向到文件。
无需任何 Qt IO 类,只要包含容器与点定义即可。

// file_stdout.cpp
#include <QVector>
#include <QPointF>
#include <iostream>
#include <cmath>int main()
{QVector<QPointF> pts{{1.5, 2.0}, {-3, 4}, {0, 0}, {5.7, -8.2}};std::cout.setf(std::ios::fixed);std::cout.precision(6);for (const QPointF &p : pts){double d = std::sqrt(p.x() * p.x() + p.y() * p.y());std::cout << p.x() << ',' << p.y() << ',' << d << '\n';}return 0;
}

运行

g++ file_stdout.cpp -std=c++17 -I/usr/include/qt6 -fPIC -o file_stdout
./file_stdout > points_stdout.txt

③ 标准文件流:std::ofstream

// file_ofstream.cpp
#include <QVector>
#include <QPointF>
#include <fstream>
#include <cmath>int main()
{QVector<QPointF> pts{{1.5, 2.0}, {-3, 4}, {0, 0}, {5.7, -8.2}};std::ofstream ofs("points_ofstream.txt", std::ios::out | std::ios::trunc);if (!ofs){std::cerr << "open failed\n";return 1;}ofs.setf(std::ios::fixed);ofs.precision(6);for (const QPointF &p : pts){double d = std::sqrt(p.x() * p.x() + p.y() * p.y());ofs << p.x() << ',' << p.y() << ',' << d << '\n';}return 0;
}

编译

g++ file_ofstream.cpp -std=c++17 -I/usr/include/qt6 -fPIC -o file_ofstream
./file_ofstream

三段代码各自生成同名文件,内容完全一致,例如

1.500000,2.000000,2.500000
-3.000000,4.000000,5.000000
0.000000,0.000000,0.000000
5.700000,-8.200000,10.004999

至此,已覆盖 Qt 原生标准输出标准文件流 三种常见场景,按需取舍即可。

http://www.dtcms.com/a/360239.html

相关文章:

  • APB协议​​ 构建一个完整的 ​​UVM验证VIP Agent介绍类的要素
  • 《隐性质量:决定软件生命周期的看不见的竞争力》
  • 【Linux】创建线程
  • flutter工程
  • 包的相对导入
  • Android开发简介
  • Redis常见数据类型及应用场景
  • Pytest 插件介绍和开发
  • 极客时间AI 全栈开发实战营毕业总结(2025年8月31日)
  • NCCL-TEST ib集群测试UCX代替方案
  • mit6.031软件构造 笔记 Testing
  • ROI、 binning、下采样功能区别
  • windows编译minicap.so文件
  • 由题构造 嵌入汇编(汇编)
  • NAS Docker 安装N8N
  • 计算机视觉与深度学习 | 双目立体特征提取与匹配算法综述——理论基础、OpenCV实践与MATLAB实现指南
  • 猛犸Lark max 无线麦克风录音爆音问题的解决
  • 【STC库函数】使用芯片自带的EEPROM来保存掉电不丢失的数据
  • 开发常用工具专栏
  • 赵玉平《梁山政治》读书笔记(下部)
  • wifi控制舵机
  • WinExec
  • Nginx反向代理及配置
  • c++ 线程局部存储(Thread-Local Storage,TLS)
  • Langflow Memory 技术深度分析
  • java--浅拷贝深拷贝
  • Introduction to GIS —— Chapter 3(Vector Data Model)
  • 雪花算法生成分布式ID
  • AI 智能体汇总,自动执行任务的“真 Agent”
  • 动态规划入门(三):一些经典动态规划模型