Qt - 从文本文件中读取

28

我有一个三列的表视图;我刚刚使用这段代码写入到文本文件中:

QFile file("/home/hamad/lesson11.txt");
if(!file.open(QIODevice::WriteOnly)) {
    QMessageBox::information(0,"error",file.errorString());
}
QString dd;

for(int row=0; row < model->rowCount(); row++) {
     dd = model->item(row,0)->text() +  ","
                 + model->item(row,1)->text() +  ","
                 + model->item(row,2)->text();

     QTextStream out(&file);
     out << dd << endl;
 }

但是我无法成功再次读取相同的文件,我尝试了这段代码,但我不知道它的问题所在。

QFile file("/home/hamad/lesson11.txt");
QTextStream in(&file);
QString line = in.readLine();
while(!in.atEnd()) {

    QStringList  fields = line.split(",");

    model->appendRow(fields);

}

请帮忙,谢谢!


你像第一次那样重新打开文件了吗?我认为这可能是你的问题。 - NG.
我无法从Qt打开文件;但是我确定写入函数通过使用geedit打开txt文件完美工作。有什么帮助吗? - user289175
mosg在上面提出了一个很好的观点,但我的问题是为什么在尝试读取文件之前不再次调用file.open呢?你在写入之前这样做了,那么在读取之前为什么不必须这样做呢?你在帖子中的代码没有这样做。 - NG.
我不想打开文本文件,我想读取文本文件中的数据,然后将它们绑定到表格视图中。 - user289175
此外,您可以阅读此文档以获取帮助:http://qt.nokia.com/doc/4.6/qfile.html#details - mosg
显示剩余2条评论
2个回答

97

您需要替换字符串行

QString line = in.readLine();

转换为 while

QFile file("/home/hamad/lesson11.txt");
if(!file.open(QIODevice::ReadOnly)) {
    QMessageBox::information(0, "error", file.errorString());
}

QTextStream in(&file);

while(!in.atEnd()) {
    QString line = in.readLine();    
    QStringList fields = line.split(",");    
    model->appendRow(fields);    
}

file.close();

1
他的错误似乎也在于他没有像你的代码中那样再次调用file.open。 - NG.
谢谢大家,我需要更多努力。出现了一个错误:错误“no matching function for call to ‘QStandardItemModel::appendRow(QStringList&)’” - user289175
3
你需要阅读Qt文档(例如Qt助手)。在QStandardItemModel类中,没有QStandardItemModel :: appendRow(QStringList&)成员,但是有appendRow(const QList <QStandardItem *>&)和appendRow(QStandardItem *)。 - mosg

0
你无法重新打开第一个文件读取数据,因为第一个文件从未关闭。关闭第一个文件,然后你就能重新打开它以读取数据。

您可以多次打开同一个文件进行阅读。在这种情况下,第二个代码不会打开它,因此出现了问题。这是一个不同的QFile对象。 - SGaist

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