Установка пользовательских данных для элемента QStringListModel - PullRequest
4 голосов
/ 03 апреля 2012

У меня есть QStringListModel

QStringListModel* blocksModel = new QStringListModel();

И класс, унаследованный от QObject

class Block : public QObject
{
    Q_OBJECT

public:

    Block();
    Block(const Block& other);
    ~Block;

//and other stuff here    

};
Q_DECLARE_METATYPE(Block*)

Когда я устанавливаю данные для Qt :: EditRole, все работает нормально, но когда я 'я пытаюсь установить данные для Qt :: UserRole, он никогда не возвращает true, и когда я получаю данные, я вижу недопустимый QVariant

int count = blocksModel->rowCount();
blocksModel->insertRows(count, 1);
QModelIndex index = blocksModel->index(count, 0);

// it works
QString name = QString("Block %1").arg(count + 1);
blocksModel->setData(index, name);

QVariant var = QVariant::fromValue(block);
// it doesn`t work
bool setSuccessful = blocksModel->setData(index, var, Qt::UserRole);

//invalid QVariant
QVariant var2 = index.data(Qt::UserRole);
Block* oneMoreBlock = var2.value<Block*>();

Фактически, независимо от типа данных, которые я пытаюсьустановить для элемента, это также не работает:

blocksModel->setData(index, QVariant(1), Qt::UserRole);

И я попробовал Qt :: UserRole + 1, и получил тот же результат.Может быть, я должен как-то определить ItemDataRoles, используемые моделью?

Есть идеи?Спасибо.

1 Ответ

5 голосов
/ 03 апреля 2012

Попробуйте использовать QStandardItemModel вместо QStringListModel.

Кажется, QStringListModel не поддерживает Qt :: UserRole.

...