You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:09:33