Qt: Использование модели по умолчанию для выбора моих данных - PullRequest
0 голосов
/ 29 ноября 2011

Я довольно новичок в Qt и нахожусь в ситуации, когда я хочу использовать модель для своих нужд: у меня есть динамическое число экземпляров подкласса, которые нужно обрабатывать по-разному (разные элементы управления пользовательским интерфейсом для каждого, если этовыбран).Я хочу получить представление списка, в котором я могу добавить новые элементы или удалить старые, а также отключить / включить существующие.

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

Знаете ли вы какие-нибудь учебники по этому вопросу?Я уже посмотрел в QtDemo и Google, но я не знаю подходящих слов для поиска, поэтому у меня не было хороших результатов.

В основном мне кажется, что мне нужен элемент модели, который принимает Collider* для своих данных.Но когда я подключаю это к QStandardItem.setData(), это говорит error: ‘QVariant::QVariant(void*)’ is private

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Итак, я нашел решение этой проблемы.Поскольку QStandardItem s могут хранить QVariant s в качестве данных, я хотел сохранить указатель на свои данные в QVariant.Для этого мне пришлось использовать Q_DECLARE_METATYPE(MyType*).Благодаря этому я смог

MyType *MyInstance = new MyType;
QVariant data;
data.setValue(MyInstance);
QStandardItem *item = new QStandardItem("My Item");
item->setData(data);
standardModel->appendRow(item);

И самое лучшее, что вы можете добавить столько типов, сколько хотите, и позволить QVariant выполнить работу, чтобы решить, содержит ли она нужный тип:

if(v.canConvert<MyType*>())
 //Yes it is MyType
else if( v.canConvert<MyOtherType*>())
    //Oh it is the other one

Итак, наконец, для этого требуется только объявить метатип, поэтому вам не нужно создавать подклассы для каких-либо элементов.

Также вы должны прочитать об ограничениях этого здесь:
Q_DECLARE_METATYPE
qRegisterMetaType

0 голосов
/ 01 декабря 2011

отвечает ли эта страница на ваши вопросы? Есть пример получения элемента StringListModel, который вы можете использовать в качестве шаблона

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