上传 .csv 或 .txt 文件以填充 QTableView

5
最近我在开发一个GUI应用程序,我想将QTableView的数据保存到.csv或.txt文件中。我使用了这个问题中收到的指引(参见此处),这让我想到是否反过来也可能实现,即是否可以从.csv或.txt文件中填充QTableView。再次强调,我更喜欢基于模型的设计,如QTableView,而不是基于项目的QTableWidget。

如果有任何代码片段或教程文档,都将非常有帮助。

1个回答

7
考虑一个名为test.csv的文件(它可以由任何文本编辑器生成): enter image description here 并且它的文本流(如果是由编程生成的)如下:
1,2,3,\n4,5,6,\n7,8,9,\n10,11,12,\n13,14,15,

如果在微软 Office Excel 中打开它,它可能看起来像这样: CSV values as displayed in 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();
}

(您可以操作代码以满足您的表格格式)


[结果]

在 QTableView 中显示的 CSV 值


我猜你打错字了,应该是 QString value = lineToken.at(j); 最后我得到了一个完全空白的表格,数据没有填充:( 编辑---抱歉,问题解决了。我忘记将输出指向我的TableView。 - RicoRicochet
你应该检查是否成功加载了 .csv 文件。使用 qDebug() 查看文件是否已加载。 - Tay2510
没有问题,我只是忘记将输出定向到我的表格视图,表格视图没有获取数据,所以它是空白的。现在没事了。非常感谢。 - RicoRicochet
1
@AmarjitBiswas 好的。但请记住,这只是一个简单的演示,帮助您抓住解析 .csv 文件的主要思路。您应该根据实际数据格式修改代码并定义数据加载方法。 - Tay2510
我发现这个演示确实有助于捕捉大的想法,尽管它很老。关于这个评论的一个快速说明是,QStringList lineToken = fileLine.split("\t", QString::SkipEmptyParts);会因为.split被弃用而产生警告。 - als0052
有用的代码,非常具有描述性。 - coterobarros

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接