正在为QStringListModel项设置自定义数据



我有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?

有什么想法吗?谢谢

尝试使用QStandardItemModel而不是QStringListModel。

QStringListModel似乎不支持Qt::UserRole。

相关内容

  • 没有找到相关文章

最新更新