Изменение содержимого ItemData - PullRequest
0 голосов
/ 09 марта 2010

Я храню объекты пользовательского типа данных в QStandardListItems. Я восстанавливаю эти объекты по телефону:

i.data(Qt::UserRole + 1).value<LiteReach>();

Это только создает новый объект в стеке. Любые изменения, которые я внесу в них, будут временными.

Есть ли способ получить базовый объект, хранящийся в itemData, чтобы им можно было напрямую управлять? Если нет, то какой метод предпочтительней изменить itemData?

Я бы не хотел вызывать setData каждый раз, когда объект изменяется, поскольку он потребляет много ресурсов.

Ответы [ 2 ]

1 голос
/ 09 марта 2010

Вы можете использовать указатели, которые разрешают доступ к конкретным объектам данных, вместо того, чтобы копировать все данные в QVariant, как описано выше.

Проблема в том, что value() возвращает копию ваших данных. Поэтому, если вы сделаете какие-либо изменения, они исчезнут, как только копия будет удалена из стека.

Если вы не хотите использовать указатели, я думаю, вам придется придерживаться setData().

0 голосов
/ 09 марта 2010

У меня сложилось впечатление, что класс QVariant не предназначен для хранения указателей.

Однако, если вы действительно хотите это сделать, вы всегда можете сделать что-то вроде

LiteNode* myPtr = new LiteNode;
QVariant v(reinterpret_cast<quint32>(myPtr)); //or quint64 for 64-bit apps
myPtr = reinterpret_cast<LiteNode*>(v.value<quint32>());

Таким образом, вам даже не нужно объявлять тип вашего объекта как метатип Qt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...