我試圖創建自定義類實例並將其傳遞給具有相應參數的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