Russian Qt Forum
Ноябрь 25, 2024, 04:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Какой тип данных использовать ?  (Прочитано 3333 раз)
Zmeishe
Гость
« : Январь 25, 2008, 15:58 »

Мне нужно из функции своего класса передать через QVariant список строк + два числа int для каждой строки.
Пока не было необходимости передавать числа, использовал QStringList - т.к. у QVariant имеется соответствующий конструктор.
Записан
Emc
Гость
« Ответ #1 : Январь 25, 2008, 16:10 »

Ну скажем такой вариант в списке передавать QString("text|1|2")
а при чтении использовать QString::section
или
вместо QStringList использовать
QHash< QString, QPair<int, int> >
//
вариантов вагон..
Записан
Zmeishe
Гость
« Ответ #2 : Январь 25, 2008, 18:17 »

Сделал так:

QVariant MyClass::MyFunc()
{
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);

...
 out << rowsCount << string1 << X1 << Y1 << strin2 << X2 ...

 return block;
}

И чего сразу не додумал. Непонимающий
Записан
vregess
Гость
« Ответ #3 : Январь 25, 2008, 21:05 »

хм.

Код:
struct MyStruct
{
  QString str;
  int a;
  int b;
};

Q_DECLARE_METATYPE(MyStruct)

...
QVariant MClass::blaFunc() const
{
  QVariantList result;
  QVariant buf;
  MyStruct data;
  // готовим данные
  for(int i=0;i<4;i++){
    data.str=QString("string %1").arg(i);
    data.a=i+2;
    data.b=i*100;
    buf.setValue(data);
    result.append(buf);
  }
  return result;
}
...
QVariant Data=blaClass->blaFunc();

if(Data.canConvert(QVariant::List)){
  QVariantList list=Data.toList();
  QListIterator<QVariant> it(list);
  QVariant buf;
  MyStruct realData;
  while(it.hasNext()){
    buf=it.next();
    if(buf.canConvert<MyStruct>()){
      realData=buf.value<MyStruct>();
      // нужные операции со структурой
    }
  }
}

мб я не правильно понял задачу? ночь на дворе  В замешательстве
если правильно - смотрим доки по QVariant и QMetaType
Записан
Zmeishe
Гость
« Ответ #4 : Январь 26, 2008, 10:00 »

Это ещё лучше, чем я думал, т.к. можно использовать функцию insert. При записи в поток, это тоже что append строки шли в обратном порядке. Мне бы пришлось переделывать принимающую функцию, а теперь нет.
Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.185 секунд. Запросов: 20.