1

我有一个 QLineEdit* 的 QList

QList<QLineEdit*> example;

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

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

我在此处QList<T>的资源页面上看到<< & >> 有正确的运算符,但是我似乎无法让它们使用以下方法保存到文件中QDataStream

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

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

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

2 回答 2

5

QList<QLineEdit*>是一个指针列表(基本上是整数,因此如果将其写入文件,您将不会获得太多有用的信息。

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);
}
于 2009-11-16T22:57:22.440 回答
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;
  }
}
于 2009-11-17T08:30:29.753 回答