【问题标题】:loading csv in qtablewidget (Why my code is not working?)在 qtablewidget 中加载 csv(为什么我的代码不起作用?)
【发布时间】:2013-08-26 05:08:08
【问题描述】:

我是自学者,刚接触 qt(我只想学写程序)。 试图将 csv 文件加载到 qtablewidget 但它用相同的数据覆盖所有列和行。我尝试关注How to import a CSV file to a QTableWidget,但没有正确理解。

代码:

QFile file("testData.txt");
QTextStream in(&file);
QStringList setDataInrow;
QStringList rowNumbers;
QString allLine;

if(file.open(QIODevice::ReadOnly)){
    allLine=in.readAll();
    rowNumbers=allLine.split("\n");
    file.close();

}

QTableWidget *myTable=new QTableWidget();
myTable->setRowCount(rowNumbers.size());


for(int row=0;row<rowNumbers.count();row++)
{
    setDataInrow=allLine.split(";");


    for(int column=0;column<setDataInrow.count();column++){
        myTable->setColumnCount(setDataInrow.size());
        //myTable->item(row,column)->setText(setDataInrow[column]);
        QTableWidgetItem *item=new QTableWidgetItem(setDataInrow[column]);
        myTable->setItem(row,column,item);


    }
}


qDebug()<<"Numbers of row needed:"<<"\n"<<rowNumbers<<"\n";
qDebug()<<"Set following data to each column as per row:"<<"\n"<<setDataInrow<<setDataInrow.size();

window->setCentralWidget(myTable);
window->show();
return app.exec();

}

我正在尝试加载:

John Kl;34;1335532;CA;0444344
Kuma jo;54;44432;NY;0322355
Lebal ho;24;44022;NY;0110004 

它应该在 3 行 5 列内加载,但它设置为 13 列。也许我无法正确地思考这一点。我需要一些代码示例的帮助,以便我可以更多地研究它。

由于我的英语不好(糟透了我的代码 :))我截取了当前程序的屏幕截图,该程序无法按预期运行:

http://imageshack.us/a/img801/1601/le59.png

【问题讨论】:

    标签: qt qtablewidget qtablewidgetitem


    【解决方案1】:
    setDataInrow=allLine.split(";");
    

    您对每一行执行一次。但是您并没有按照您的意图拆分行,而是每次拆分整个文件内容。

    编辑: 不要拆分 allLine。您已经有一个 QStringList,其中包含您的行:rowNumbers。

    这个你必须分开。

    for(int row=0;row<rowNumbers.count();row++){
      QStringList rowCells = rowNumbers.at(row).split(";");
      .....
    }
    

    我希望这能给你这个想法。不保证细节。

    编辑 2:

    当你这样做时

    setDataInrow=allLine.split(";");

    您的字符串列表包含:

    John Kl 34 1335532 CA 0444344 Kuma jo 54 44432 NY 0322355 Lebal ho 24 44022 NY 0110004。

    这是您文件中的全部文本。换行无关紧要。他们只是另一个角色。您将所有这些添加到一行中。你做了三遍。

    你想要的是首先将文本分成几行。你已经在这里做了:rowNumbers=allLine.split("\n");

    对于您的示例数据,rowNumbers 字符串列表包含三个条目。文件中的每个条目一行。 这些行必须拆分。

    【讨论】:

    • 介意解释一下我该怎么做吗?
    • QTableWidgetItem *item=new QTableWidgetItem(rowCells[column]); myTable->setItem(行,列,项);只计算第一行。这似乎很容易,但我不知道为什么我完全无法理解这一点。
    • 首先我要感谢您快速回复帮助帖子。如果您不介意发布工作代码以便我可以弄清楚代码是如何工作的(也许这是我的英语不好的问题),也许这对我会更有帮助。我在 Qt/gui 编程方面的经验只有几天,这就是为什么我总是被卡住(即使是简单的事情)。再次感谢您帮助我!
    • 已经不分裂了吗?如果我做 QStringList rowCells = rowNumbers.at(row).split(";");然后 rowCells 保存第一行:(“John Kl”,“34”,“1335532”,“CA”,“0444344”)并正确设置为第一行。我就是不能去下一行。当我拆分字符串时,总是会发生这种情况,困惑!
    猜你喜欢
    • 2014-01-23
    • 2013-08-06
    • 2021-03-17
    • 2018-04-24
    • 2019-01-07
    • 2014-04-28
    • 2017-06-18
    • 2019-03-12
    相关资源
    最近更新 更多