【发布时间】:2020-12-23 03:53:20
【问题描述】:
如何实现QAbstractListModel 的data 函数,使其返回具有从QML ListView 的委托可见的属性的东西?
对于项目类型,我尝试实现具有Q_PROPERTYs 的QObject 子类,但QAbstractListModel::data 返回QVariant,并且QObject* 无法转换为QVariant?
如何创建一个 QVariant,它的命名属性对 QML 可见?
class MyListItem : public QObject {
Q_OBJECT
Q_PROPERTY(type name READ name WRITE set_name NOTIFY nameChanged)
/*...*/
public:
MyListItem(QObject* parent, const QString& name) : QObject(parent) {
set_name(name);
}
};
class MyList : public QAbstractListModel
{
public:
MyList(QObject* parent);
Q_INVOKABLE int rowCount(const QModelIndex &parent = QModelIndex()) const override;
Q_INVOKABLE QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
QVector<MyListItem*> items;
};
Q_INVOKABLE int MyList::rowCount(const QModelIndex &) const {
return items.size();
}
Q_INVOKABLE QVariant MyList::data(const QModelIndex &index, int) const {
MyListItem* item = items[index.row()];
return item; // <--- ERROR
}
获取:
In member function ‘virtual QVariant MyList::data(const QModelIndex&, int) const’: error: use of deleted function ‘QVariant::QVariant(void*)’ 18 | return item; | ^~~~
【问题讨论】:
-
请提供一个minimal reproducible example,如果它可以包含指向QObject的指针,请提供一个QVariant,所以我认为问题是另一个
-
@eyllanesc:查看更新。无法将
QObject*转换为QVariant