1

QLineEdit* の QList があります

QList<QLineEdit*> example;

例では、100 アイテムの lineEdits が保持されます。

ファイルに保存またはロードしようとすると、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*>ポインタのリストです(基本的には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);
}
于 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 に答える