代码之家  ›  专栏  ›  技术社区  ›  pimvdb

是否将qlist<t>保存到文件?

  •  1
  • pimvdb  · 技术社区  · 16 年前

    我有一个qlineedit*的qlist

    QList<QLineEdit*> example;
    

    示例将包含100个行编辑项。

    当我尝试保存或加载到文件时,它无法保存或加载 QList 当然,如果有的话。我得到的数据远低于预期。

    我看到了 QList<T> 的资源页 here 是否有正确的<<>>运算符, 但是,我似乎无法让他们用 QDataStream

    我还尝试将lineedits中的所有“text()”值复制到单独的字符串列表中,但仍然无法将它们保存到文件中。任何帮助都将不胜感激。

    编辑: 看起来是这样的。这就是我如何读回它们,有没有一个更简单的方法,或者我已经介绍了很多内容?

        //memoryAddresses
        for(int i = 0; i < 100; i++)
        {
            QString temp;
            loadFile >> temp;
            memAddr.at(i)->setText(temp);
        }
    
    2 回复  |  直到 16 年前
        1
  •  5
  •   Jesse Vogt    16 年前

    QList<QLineEdit*> 是一个指针列表(基本上是int,所以如果你把它写到一个文件中,你就不会得到很多有用的信息。

    这个 text() 方法应该执行您正在查找的操作。

    foreach( const QLineEdit* le, example )
    {
      if( le )
      {
         ds << le->text();
      }
    }
    

    注意两者之间的区别 displayText text .

    回读:

    如果只使用字符串, QTextStream 类更易于使用(也可以在上面使用,而不是qdatastream…为了保持一致,尽管应该使用相同类型的流进行读写)。我目前无法测试此代码,但您可以尝试以下操作:

    QList<QLineEdit*> example;
    while(!stream.atEnd())
    {
       QString str;
       stream >> str;
       if( stream.isNull() )
         break;
       QLineEdit* le = new QLineEdit();
       le->setText(str);
       example.append(le);
    }
    
        2
  •  1
  •   TimW    16 年前

    流未分配字符串对象。 使用qString对象而不是指针。

    //memoryAddresses
    for(int i = 0; i < 100; i++)
    {
        QString temp;
        loadFile >> temp;
        memAddr.at(i)->setText(temp);
    }
    

    或者您可以编写自己的qlineedit流函数

    QDataStream& operator<<(QDataStream& stream, const QLineEdit& lineEdit )
    {
        const qint32 version(0);
        stream << version;
        stream << lineEdit.text();
        //... whatever you want from the lineedit
    }
    
    QDataStream& operator>>(QDataStream& stream, const QLineEdit& lineEdit )
    {
        qint32 version(0);
        QString text;
        stream >> version;
        Q_ASSERT_X(version, __FUNCSIG__, "Wrong line edit version");
        stream >> text;
        lineEdit.setText(text);
        //... whatever you want from the stream
    }
    
    
    // write to stream
    foreach( const QLineEdit* le, example )
    {
      if( le )
      {
         ds << *le;
      }
    }
    
    // read from stream
    foreach( const QLineEdit* le, example )
    {
      if( le )
      {
         ds >> *le;
      }
    }