2010-04-10 2 views
23

У меня есть табличный вид с тремя столбцами; Я только что прошел писать в текстовый файл, используя этот кодQt - чтение из текстового файла

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); 

} 

Любая помощь пожалуйста?

+0

ли вы открыть файл снова, как вы делали в первый раз? Я думаю, это может быть вашей проблемой. –

+0

Я не мог открыть файл из Qt; но я уверен, что функция записи отлично работает, открыв файл txt с помощью geedit. Любая помощь ?? – user289175

+0

У mosg есть хорошая точка выше, но мой вопрос: почему вы не вызываете file.open еще раз, прежде чем пытаться прочитать ваш файл? Вы делаете это, прежде чем писать, так почему бы вам не сделать это, прежде чем читать? Ваш код в сообщении не делает этого. –

ответ

81

Вы должны заменить ломаную линию

QString line = in.readLine(); 

в в то время как:

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 снова, как вы делаете в своем коде , –

+0

Спасибо всем, мне нужно больше усилий. есть ошибка ошибка «нет соответствующей функции для вызова« QStandardItemModel :: appendRow (QStringList &) »« – user289175

+3

@ user289175: И снова вам нужно прочитать Qt docs (например, Qt Assistant). В классе QStandardItemModel это не член QStandardItemModel :: appendRow (QStringList &), но appendRow (const QList &) и appendRow (QStandardItem *) имеет. – mosg

Смежные вопросы