Qt C++:如何在另一个函数中获取QStringList数据?
解决方案
针对你的需求,有两种直接且能保证数据完整传递的实现方式:
方案一:使用类成员变量存储数据
这是最常用的方式,将需要传递的QStringList定义为Parser类的私有成员,在parse函数中完成赋值,parseExcel函数直接访问该成员即可。
修改后的代码示例:
// Parser类的头文件声明 class Parser { private: QStringList m_parsedLines; // 私有成员存储解析后的行数据 public: void parse(QString inputString); void parseExcel(); }; // 实现文件 void Parser::parse(QString inputString) { // 直接将解析结果赋值给类成员变量 m_parsedLines = inputString.split(QRegExp("[\n+\r+]"), Qt::SplitBehaviorFlags::SkipEmptyParts); } void Parser::parseExcel() { // 直接使用类成员中的数据 if (m_parsedLines.isEmpty()) { // 处理空数据的情况,比如直接返回 return; } // 编写导出Excel的逻辑,遍历m_parsedLines即可 for (const QString& line : m_parsedLines) { // 处理每一行数据 } }
注意事项:
- 由于数据量近20万条,要注意对象生命周期:确保调用
parseExcel时,Parser对象未被销毁,数据仍有效。 - 若多次调用
parse,旧数据会被覆盖;若需保留历史数据,可改用QVector<QStringList>存储,或在赋值前判断是否需要追加。 - 涉及多线程操作时,需给成员变量加锁(如
QMutex),避免数据读写冲突。
方案二:修改parseExcel函数参数传递
如果不想使用成员变量,可以修改parseExcel的参数,通过常量引用传递数据(避免拷贝20万条数据带来的性能损耗)。
修改后的代码示例:
// 先在parse函数中完成解析,再调用parseExcel时传入数据 void Parser::parse(QString inputString) { QStringList inputStringSplitArrayLines = inputString.split(QRegExp("[\n+\r+]"), Qt::SplitBehaviorFlags::SkipEmptyParts); // 直接调用parseExcel并传入数据 parseExcel(inputStringSplitArrayLines); } // 修改parseExcel的参数为const引用 void Parser::parseExcel(const QStringList& parsedLines) { if (parsedLines.isEmpty()) { return; } // 导出Excel逻辑,遍历parsedLines for (const QString& line : parsedLines) { // 处理每一行数据 } }
注意事项:
- 必须使用
const QStringList&(常量引用)传递,而非值传递,否则会触发QStringList的深拷贝,导致内存占用飙升、性能下降。 - 这种方式适合不需要长期存储数据的场景,解析完成后直接导出,用完数据即可释放。
内容的提问来源于stack exchange,提问作者ysncck
相关产品推荐
相关产品推荐

