LINUX.ORG.RU

Как в QListWidget data сохранить QList<>

 , , ,


0

1

Так сохраняю QList в setData.

QListWidgetItem * item = new QListWidgetItem("name");

QList<QTableWidgetItem*> listItemsforTable;

item->setData(LISTROLE,(intptr_t)&listItemsforTable);


Пытаюсь получить его так:

intptr_t ptr = item->data(LISTROLE).toInt();
QList<QTableWidgetItem*> * listItemsforTable =static_cast<QList<QTableWidgetItem*>>(ptr);

Но выдает ошибку:

 error: no matching function for call to QList<QTableWidgetItem*>::QList(intptr_t&)
     QList<QTableWidgetItem*> * listItemsforTable =static_cast<QList<QTableWidgetItem*>>(ptr);                                                                                       ```
Как правильно сделать подскажите.


Последнее исправление: user2132 (всего исправлений: 4)

Ещё одну звёздочку забыл:

QList<QTableWidgetItem*> * listItemsforTable =static_cast<QList<QTableWidgetItem*>*>(ptr);
//                                                                                ^ тут
xaizek ★★★★★
()

intptr_t ptr = item->data(LISTROLE).toInt();

А ты не боишься, что у тебя во время toInt() старшие биты потеряются?

XMs ★★★★★
()
Ответ на: комментарий от user2132

Есть два момента:

  1. Тебе не нужно хранить указатель на список, ты можешь хранить QVariantList сам по себе, избавляя себя от проблем (за собираемость не ручаюсь, ориентируюсь на документацию):
    QListWidgetItem *item = new QListWidgetItem("name");
    QList<QVariant> listItemsforTable;
    <fill listItemsForTable>
    item->setData(LISTROLE, listItemsforTable);
    
  2. У меня есть ощущение, что ты что-то делаешь не так, потому что хранить в WidgetItem указатели на другие итемы значит вытаскивать на уровень представления данных их внутреннюю организацию (модель)
XMs ★★★★★
()
Ответ на: комментарий от XMs

Вот этот вариант без & не собирается:

QList<QListWidgetItem*> listItemsforTable;
item->setData(LISTROLE,listItemsforTable);
error: no matching function for call to 'QListWidgetItem::setData(printFormulars::<anonymous enum>, QList<QListWidgetItem*>&)'
     item->setData(LISTROLE,listItemsforTable);
                                              ^

Поэтому стал пробовать через указатель.

user2132
() автор топика
Последнее исправление: user2132 (всего исправлений: 2)
Ответ на: комментарий от user2132

QList<QListWidgetItem*> listItemsforTable;

По-моему, я ясно написал про QVariantList (==QList<QVariant>), а не про QList<QListWidgetItem*>

XMs ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.