我试图创建自定义类实例并将其传递给具有相应参数的Q_INVOKABLE函数。 我试图做一个例子来指出我试图做什么。所以基本上我有一个Foo类和另一个带有Foo作为参数的函数的Bar类。我想在QML中调用这个函数,但我不知道如何实例化Foo来将它作为该函数的参数传递。将自定义C++类型传递为QML函数参数
编辑 - 关于主要目标的更多信息:
真正的目标是拥有具有自定义类对象列表的子类化QAbstractItemModel。该列表将使用模型data()函数表示。该模型应该用QML中的一些视图来表示。我也想在运行时填充模型。所以模型类应该有一个函数,它接受一个自定义类实例并将其附加到内部列表中。所以我的方法是在qml中创建并传递自定义类实例。我还没有找到任何可以做这种类型的例子。 这里是我已经有了:
foo.h中
class Foo : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ getName WRITE setName)
public:
Foo(QString fooName, QObject *parent = 0) : QObject(parent){
name = fooName;
}
QString getName() const {
return name;
}
void setName(const QString &value){
name = value;
}
private:
QString name;
};
Bar.h
class Bar : public QObject
{
Q_OBJECT
public:
explicit Bar(QObject *parent = 0) : QObject(parent){}
Q_INVOKABLE void addFoo(const Foo &foo){
fooList.append(foo);
}
private:
QList<Foo> fooList;
};
的main.cpp
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<Foo>("Test", 1, 0, "Foo");
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
engine.rootContext()->setContextProperty("bar", new Bar());
return app.exec();
}
main.qml
import Test 1.0
Window {
Button {
id: addFoo
text: "Add new Foo to Bar"
onClicked: {
bar.addFoo(????)
}
}
}
作为一般规则,设置背景属性之前加载QML。在加载引用上下文属性的QML之前,上下文属性*必须设置*。它仍然可以工作,但你可以因此而招致奇怪的错误。 – BaCaRoZzo