将QList <t>保存到文件?</t>

时间:2009-11-16 22:46:40

标签: c++ qt qlist qlineedit

我有一个QLineEdit *的QList

QList<QLineEdit*> example;

示例将包含100项lineEdits。

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

我在QList<T>的资源页面here上看到,&lt;&lt;&lt;&lt; &安培; &GT;&gt;中 但我似乎无法使用QDataStream

将它们保存到文件中

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

编辑:看起来就是这样。这就是我如何阅读它们,有没有更简单的方法,或者我已经覆盖了它?

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

2 个答案:

答案 0 :(得分:5)

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

text()方法应该可以满足您的需求。

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

请注意displayTexttext之间的差异。

回读:

如果你只使用字符串,那么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);
}

答案 1 :(得分:1)

流不分配字符串对象。 使用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;
  }
}