Nano Hash - криптовалюты, майнинг, программирование

Сохранение QList‹T› в файл?

У меня есть QList QLineEdit *

QList<QLineEdit*> example;

Пример будет содержать 100 элементов lineEdits.

Когда я пытаюсь сохранить или загрузить файл, он не может правильно сохранить или загрузить QList, если вообще. Я получаю намного меньше, чем ожидалось, количество данных.

На странице ресурса QList<T> я вижу здесь, что есть правильный оператор для ‹‹ & >>, однако я не могу заставить их сохранять в файл, используя QDataStream

Я также попытался скопировать все значения «text()» из LineEdits в отдельный список строк, но я все еще не могу сохранить их в файл. Любая помощь будет оценена по достоинству.

РЕДАКТИРОВАТЬ: Похоже, это сделало это. Вот как я их читаю, есть ли более простой подход к этому, или я в значительной степени рассмотрел его?

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

  • Что касается вашего редактирования, я надеюсь, что это не совсем то, как вы это делаете. Мне кажется, что вы объявляете указатель на QString, когда он должен быть непосредственно QString. 17.11.2009

Ответы:


1

QList<QLineEdit*> - это список указателей (в основном целые числа, поэтому, если вы запишете это в файл, вы не получите много полезной информации.

Метод text() должен делать то, что вы ищете.

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

Обратите внимание на разницу между displayText и текст.

Чтобы прочитать обратно:

Если вы работаете только со строками, лучше использовать класс 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);
}
16.11.2009
  • @Jesse Похоже, это сработало отлично. Я предполагаю, что мне следует прочитать QStrings обратно в другой массив, а затем скопировать обратно? Если нет более простого подхода 17.11.2009

  • 2

    Строковый объект не выделяется потоком. Используйте объект 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;
      }
    }
    
    17.11.2009
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..