2010-04-10 49 views
23

Tengo una vista de tabla con tres columnas; acabo de pasar a escribir en un archivo de texto con el códigoQt - leyendo de un archivo de texto

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

Pero no voy a tener éxito a leer el mismo archivo de nuevo, probé este código, pero no sé dónde está el problema en que

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

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

    model->appendRow(fields); 

} 

¿Alguna ayuda por favor?

+0

Cómo se abre el archivo de nuevo como lo hizo la primera vez? Creo que ese podría ser tu problema. –

+0

No pude abrir el archivo desde Qt; pero estoy seguro de que la función de escritura está funcionando perfectamente al abrir el archivo txt usando geedit. Alguna ayuda ?? – user289175

+0

mosg tiene un buen punto anterior, pero mi pregunta era ¿por qué no llamas a file.open nuevamente antes de intentar leer tu archivo? Lo haces antes de escribirlo, entonces ¿por qué no deberías hacerlo antes de leerlo? Tu código en la publicación no hace eso. –

Respuesta

81

usted tiene que reemplazar línea de cuerda

QString line = in.readLine(); 

en mientras:

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

, su error también parecía ser que no llamaba a file.open nuevamente como lo hace en su código . –

+0

Gracias a todos, necesito más esfuerzos. hay un error error "no hay función de coincidencia para llamar a 'QStandardItemModel :: appendRow (QStringList &)'" – user289175

+3

@ user289175: Y de nuevo, debe leer Qt docs (por ejemplo, Qt Assistant). En la clase QStandardItemModel, este no es un miembro QStandardItemModel :: appendRow (QStringList &), pero tiene appendRow (const QList &) & appendRow (QStandardItem *). – mosg

Cuestiones relacionadas