【问题标题】:Uploading .csv or .txt file to populate QTableView上传 .csv 或 .txt 文件以填充 QTableView
【发布时间】:2014-12-08 08:39:29
【问题描述】:

最近我正在开发一个 gui 应用程序,我想将 QTableView 的数据保存在 .csv 或 .txt 文件中。我使用了received during this question 的指导,这让我想到是否也可以反过来;即,如果 QTableView 可以从 .csv 或 .txt 文件填充。再一次,我更喜欢使用基于模型的设计,例如 QTableView 而不是基于项目的 QTableWidget。

任何 code-sn-p 或教程文档都会很有帮助。

【问题讨论】:

    标签: c++ qt qt4


    【解决方案1】:

    考虑一个test.csv 文件(它可以由任何文本编辑器生成):

    而后面的文本流是(如果通过编程生成的话):

    1,2,3,\n4,5,6,\n7,8,9,\n10,11,12,\n13,14,15,
    

    如果在 Microsoft Office Excel 中打开,它可能看起来像:


    要将这个.csv 文件读取到您的QTableView 的模型中:

    QStandardItemModel *model = new QStandardItemModel;
    
    QFile file("test.csv");
    if (file.open(QIODevice::ReadOnly)) {
        
        int lineindex = 0;                     // file line counter
        QTextStream in(&file);                 // read to text stream
        
        while (!in.atEnd()) {                           
       
            // read one line from textstream(separated by "\n") 
            QString fileLine = in.readLine();  
                                             
            // parse the read line into separate pieces(tokens) with "," as the delimiter
            QStringList lineToken = fileLine.split(",", QString::SkipEmptyParts); 
            
            // load parsed data to model accordingly
            for (int j = 0; j < lineToken.size(); j++) {
                QString value = lineToken.at(j);
                QStandardItem *item = new QStandardItem(value);
                model->setItem(lineindex, j, item);
            }
    
            lineindex++;   
        }
    
        file.close();
    }
    

    (你可以操纵代码来满足你的表格格式)


    [结果]

    【讨论】:

    • 我猜你打错了,应该是,QString value = lineToken.at(j);最后我得到了一个完全空白的表格,数据没有被填充:(已编辑---对不起,整理出来了。我忘了直接输出到我的表格视图。
    • 您应该检查您是否成功加载了.csv 文件。使用 qDebug() 查看文件是否已加载。
    • 不,没关系,我只是忘记将输出定向到我的 tableView,tableView 没有获取数据,这就是为什么它是空白的。现在很好。非常感谢。
    • @AmarjitBis 没问题。但请记住,这只是一个简单的演示,可帮助您掌握解析.csv 文件的主要思想。您应该根据您的实际数据格式自行修改代码并定义数据加载方式。
    猜你喜欢
    • 2021-11-27
    • 2015-02-05
    • 2019-03-10
    • 2019-02-10
    • 1970-01-01
    • 2020-03-02
    • 2019-07-23
    • 2015-12-03
    • 1970-01-01
    相关资源
    最近更新 更多