Выбор типа данных Qt - PullRequest
       5

Выбор типа данных Qt

1 голос
/ 19 августа 2011

Я пытаюсь передать большое количество данных, которые извлекаются из набора текстовых полей. Данные представлены в форматах «+1.59», «-2.52» и некоторых целых. Кроме того, чтобы сделать вещи более интересными, существует различное количество наборов текстовых полей.

Я изучал использование QVariantMap, но после извлечения данных и помещения их в QByteArray оказалось трудно. Я также подумал об использовании QByteArray, но анализ его снова и снова не показался мне подходящим. Я бы предпочел тип данных, на который я мог бы ссылаться на имя элемента - то есть data ["preX1"].

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

Ответы [ 4 ]

2 голосов
/ 19 августа 2011

Учитывая, что данные поступают из text блоков, я передаю их как текст, пока вы не проанализируете и не подтвердите их.После проверки вы обычно будете передавать разные значения какому-либо конструктору, чтобы сгруппировать все значения в один объект.

0 голосов
/ 19 августа 2011

Поскольку ваши данные представляют числа с плавающей точкой, я согласен, что вам, вероятно, следует использовать структуру данных, которая содержит числа с плавающей точкой, а не QVariants.Если вы хотите иметь возможность ссылаться на элементы по имени, вы захотите использовать QMap или QHash.QHash работает быстрее, но значения QMap сортируются по ключу, если вы перебираете их.Используемый вами тип данных, QVariantMap, это просто QMap<QString, QVariant>, где QString является ключевым типом данных для карты, а QVariant является типом данных значения для карты.

Я бы пошел с QHash<QString,float> floatMap.Чтобы преобразовать данные из текстовых полей, вы можете просто использовать QString::toInt().

QHash<QString,float> floatHash;
QString textBoxString;
QString textBoxName;
floatHash[textBoxName] = textBoxString.toInt();

для доступа к данным, используйте:

float value = floatHash[textBoxName];
0 голосов
/ 19 августа 2011

Если все это происходит из текстовых полей, вы можете также использовать что-то вроде QStringList, если вам действительно не нужно их как QVariant, Qt сами рекомендуют использовать списки для скорости и эффективности, перечисленные в QVector details из документов.

0 голосов
/ 19 августа 2011

Ваши данные кажутся только десятичными числами.В этом случае вектор с плавающей точкой, вероятно, будет наиболее эффективным:

typedef std::vector<float> FloatVector
FloatVector yourData;

Если это не просто с плавающей точкой, то вектора вариантов будет достаточно (нет необходимости в карте):

typedef std::vector<QVariant> VariantVector
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...