试图在QT

时间:2016-04-09 22:26:18

标签: c++ qt

我试图从.txt文档中读取行,txt的格式为:

名;姓氏;年龄;地址;辙;电话

名;姓氏;年龄;地址;辙;电话

名;姓氏;年龄;地址;辙;电话

当我点击名为&#34的按钮时,btnVerUsuarios"所有数据将在此订单的textBrowser中一次显示:

名称:名称

姓氏:theLastname

年龄:年龄

地址:地址

RUT:theRut

电话:电话

还有两次包含所有数据

这就是我所拥有的,但是当我尝试执行此程序时,会出现错误,我必须关闭该程序:

void MainWindow::on_btnVerUsuarios_clicked()
{
    QFile F("datos.txt");
    F.open(QIODevice::ReadOnly);
    QTextStream leer(&F);            //here we have the content of the txt
    QStringList parsear;            //to parse the specific data from a line
    QString nombres;                  // to save the name
    QString apellidos;                // to save the lastname
    QString edad;                     // to save the age
    QString address;                  // to save the address
    QString rut;                      // to save the RUT
    QString fono;                     // to save the phone
    QString forma = "";               // to save all the data
    QString linea = leer.readLine();   // a line
    while (!linea.isNull()) {
        parsear = linea.split(";");      // parsing
        nombres = parsear[0];            // the names
        apellidos = parsear[1];          // the lastnames
        edad = parsear[2];               // the age
        address = parsear[3];            // the address
        rut = parsear[4];                // the RUT
        fono = parsear[5];               // the phone

        linea=leer.readLine();  //to select the next line (or that is what I want)
        forma = forma + "Nombres: "+nombres+"\nApellidos: "+apellidos+"\nEdad: "+edad+"\nDirección: "+address+"\nRUT: "+rut+"\nTeléfono: "+fono+"\n\n";
    }   // The entire data with the required format is ok, now I have to put it in the textBrowser
    ui->textBrowser->setText(forma);  //putting the entire data int the textBrowser

}

如果还有另一种简单的方法,请帮助我。

抱歉我的英文不好,谢谢。

修改

我试图一次显示所有数据,对不起,如果我说错了。无论如何,由于受到了痛苦的回答,我已经解决了我的问题。

1 个答案:

答案 0 :(得分:1)

读取整个文件并一次显示所有内容的最简单方法就是

try 
{
  QFile ReadMyFile("File Path Here");
  if(!ReadMyFile.open(QIODevice::ReadOnly))
  QTextStream in(&ReadMyFile);
  QString GetContents = ReadMyFile.readAll();
  ui->textBrowser->setText(GetContents);
  ReadMyFile.close();
}
catch(...) // Generic catch used here, substitute with your own 
{ 
   // Print exception if one occurs
}

如果在查找文件等问题时,您应该总是处理一些异常处理,尤其是在处理您不希望程序立即崩溃的文件时。

上面的代码只是将整个文件读入一个字符串并将其全部打印到textBrowser中。有很多种方法可以做到这一点,我不确定你最终的目标是什么,对于所有意图和目的,这比你上面提到的要高效得多,但是你应该只复制粘贴并且总是使用它。这是一个非常简单的示例,可以帮助您实现目标,它适用于大量文件......

从我所看到你想要一次显示整个文件(这就是你上面所说的),但我不能理解的是你为什么要分割所有东西并将它们存储到各种各样的东西中的QString?

更新:

如果您不想更改您的写入过程并将每个字段分开并以换行符结束(我建议您这样做),那么最好的方法是使用QLinkedList这是您应该使用的一些东西如果你打算修改文件..

http://doc-snapshots.qt.io/qt5-5.6/qlinkedlist.html

它是迭代器

http://doc-snapshots.qt.io/qt5-5.6/qlinkedlistiterator.html#QLinkedListIterator

这就像阅读文件,查找分离字符并将下一个元素添加到链接列表一样简单,我链接的文档将向您展示您可以使用此操作的所有内容,希望有所帮助!