【发布时间】:2018-07-03 08:29:47
【问题描述】:
我正在尝试将带有自定义对象 (Sample) 的 QList 公开到 QML 中。每当我将这些自定义对象(它们继承自 QObject)存储到 QList<QObject *> 中时,它们就会显示出来,但没有信息,但是当我尝试将它们公开为 QList<Sample *> 时,它们不会。
sample.h
class Sample : public QObject
{
Q_OBJECT
Q_PROPERTY(QString getVar READ getVar WRITE setVar NOTIFY varChanged)
public:
explicit Sample();
//! Returns var
QString getVar() const { return var; }
//! Sets var
void setVar(const QString &a);
signals:
varChanged();
protected:
QString var;
};
包含列表的类如下所示
samplecontrol.h
class SampleManager : public QObject
{
Q_OBJECT
Q_PROPERTY(QList<Sample *> getSampleList READ getSampleList NOTIFY sampleListChanged)
public:
SampleManager(const QString &path);
//! Returns sample list
QList<Sample *> getSampleList() const { return sampleList_; }
signals:
sampleListChanged();
protected:
QList<Sample *> sampleList_;
};
我正在设置上下文
view_->rootContext()->setContextProperty("slabGridModel", QVariant::fromValue(samplecontrol.getSampleList()));
正如我所说,当我累了
QList<QObject *> datalist;
datalist.append(sampleManager.getSampleList().first());
datalist.append(sampleManager.getSampleList().last());
成功了。我怎样才能使它与QList<Sample *> 一起工作?
感谢您的帮助!
【问题讨论】:
-
所以你想在 QML 端使用 getSampleList 吗?它会成为某个视图的模型吗?
-
@eyllanesc 是的,应该是委托 Sample 的 GridView 的模型
-
问题是一个QList
是一个只读模型,每个副本添加一次,也就是说,如果你向QList 添加元素它不会通知你,因此即使添加元素,视图也将始终为空。 -
@eyllanesc 那我怎么暴露它呢?
-
对于生产你必须实现一个合适的模型,直接暴露列表效率太低了。由于您的模型项从
QObject派生,您可以使用通用模型实现,那里有一些可用的。