Pregunta

Tengo un QList de QLineEdit * 's

QList<QLineEdit*> example;

Ejemplo sostendrá 100 elementos de lineEdits.

Cuando trato de guardar o cargar un archivo, que no puede guardar o cargar el QList adecuadamente, en todo caso. Consigo un recuento mucho menor de lo esperado de los datos.

Me veo en la página de recursos de QList<T> aquí que no es el operador correcto << y >>, sin embargo, me parece que no puede conseguir que se ahorran en un archivo utilizando QDataStream

También he intentado copiar todo el "texto ()" los valores de los LineEdits en una lista de cadenas separada pero todavía no puedo guardarlos en un archivo. Cualquier ayuda sería muy apreciada.

EDIT: Parece como si lo hizo. Esta es la forma en que los estoy leyendo hacia atrás, ¿existe un método más sencillo para esto, o me he prácticamente cubierto?

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

Solución

QList<QLineEdit*> es una lista de punteros (básicamente intercepciones por lo que si usted escribe en un archivo que no obtendrá mucha información útil.

El método text() debe hacer lo que usted está buscando.

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

Tenga en cuenta las diferencias entre displayText y texto .

Para leer de nuevo:

Si sólo está trabajando con cadenas, la href="http://doc.trolltech.com/4.5/qtextstream.html" rel="nofollow noreferrer"> QTextStream clase

QList<QLineEdit*> example;
while(!stream.atEnd())
{
   QString str;
   stream >> str;
   if( stream.isNull() )
     break;
   QLineEdit* le = new QLineEdit();
   le->setText(str);
   example.append(le);
}

Otros consejos

El objeto de cadena no es asignado por la corriente. Utilice un objeto QString en lugar de un puntero.

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

O puede escribir sus propias funciones de streaming 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;
  }
}
scroll top