我是学生程序员,我正在使用Qt开发工作的GUI界面,我很难弄清楚如何使这个导入功能工作。如果你愿意的话,一些程序员编写器会阻塞。到目前为止我的代码是:
void InjectionLocationsDialogExpanded::importCSVFile()
{
QString fileName = QFileDialog::getOpenFileName(this, ("Open File"), "/home", ("csv File(*.csv)"));
QString data;
QFile importedCSV(fileName);
QStringList rowOfData;
QStringList rowData;
int tempint = 0;
data.clear();
rowOfData.clear();
rowData.clear();
if (importedCSV.open(QFile::ReadOnly))
{
data = importedCSV.readAll();
rowOfData = data.split("\n");
rowData = data.split(";");
importedCSV.close();
}
qDebug() << data;
for (int x = 0; x < rowOfData.size(); x++)
{
for (int y = 0; y < ui->tableWidgetInjectionLocationsExpandedDialog->columnCount(); y++)
{
ui->tableWidgetInjectionLocationsExpandedDialog->item(x,y)->setText(rowData[]);
}
}
}
这里的问题是我不知道如何获取表中每个项的settext来引用rowData QStringList中的下一个项。我需要增加一个位置,但我不能使用int ++,因为这最终将在QStringList中查找不存在的项并导致分段错误。由于当前的for循环结构,我也不能使用for循环来限制我在位置字段中需要的数字。我只是想不出一个好的策略来解决这个问题。请留下建设性的意见,因为我只对学习或完成这项任务感兴趣。谢谢你的阅读!
答案 0 :(得分:3)
首先,您需要处理行结尾。 这意味着如果您只是在CSV文件中检查“\ n”,那么您的代码可能与平台无关。
如果我得到你要做的事情,你必须在for循环中设置rowData。 所以,那时我会做什么:
rowOfData.clear();
rowData.clear();
if (importedCSV.open(QFile::ReadOnly))
{
data = importedCSV.readAll();
rowOfData = data.split("\n");
importedCSV.close();
}
for (int x = 0; x < rowOfData.size(); x++)
{
rowData = rowOfData.at(x).split(";");
for (int y = 0; y < rowData.size(); y++)
{
ui->tableWidgetInjectionLocationsExpandedDialog->item(x,y)->setText(rowData[y]);
}
}
我想应该这样做。 最好的问候。