fol*_*bis 10 javascript qml qt-quick qt5 qtquick2
我的应用程序使用c ++和QML.
我在C++部分定义了几个对象来访问SQL等.
看起来像:
class MyObject : public QObject
{
Q_OBJECT
public:
MyObject(QObject *parent = 0);
Q_INVOKABLE void someFunction(const QString &query);
};
qmlRegisterType<MyObject>("xxx.xxx", 1, 0, "MyObject");
Run Code Online (Sandbox Code Playgroud)
理想情况下,我只需要在JML中使用这些对象,而不是在QML中.
我尝试了很多例子并阅读了所有文档,但仍然无法解决我的问题.
所以我的问题:
var obj = Qt.createComponent("MyObject");但看起来不行.是否有可能以正常的JS风格定义新对象 - var obj = new MyObject;?TypeError: Property 'someFunction' of object QQmlComponent(0x3605f5c0) is not a function.我在这里做错了什么?我的对象派生自QObject,而不是来自QQmlComponent.文档非常清楚,但混乱看起来像是在等式的 QML 方面。这应该可以帮助您开始:
//C++
class MyObject : public QObject
{
Q_OBJECT
public:
MyObject(QObject *parent = 0);
Q_INVOKABLE void someFunction(const QString &query) { qDebug() << query;}
};
....
qmlRegisterType<MyObject>("foo.bar", 1, 0, "MyObject");
Run Code Online (Sandbox Code Playgroud)
QML 如下:
import foo.bar 1.0 //This is your register type
Item {
MyObject { //here's the instance, remember it is declarative
id: myObject;
}
MyObject {
id: myObjectInstance2
}
Button {
onClicked: {
myObject.someFunction("doSomething"); //here is using a reference
myObjectInstance2.someFunction("doSomethingElse");
}
}
}
Run Code Online (Sandbox Code Playgroud)
单击后,您应该会在输出中看到字符串(我没有编译或测试它)。请务必在您的主类中注册该类型。
如果您在移动设备上使用 SQL,则应该检查本地存储对象。这是一个非常简单的回调 API,可与 SQLite 配合使用。我将它用于桌面应用程序并且没有遇到太多麻烦。返回列表有点烦人,所以只需尝试坚持简单的类型即可轻松集成 JavaScript。
我希望这有帮助。我非常喜欢在 QML 中工作,一旦你学会了它就会非常有趣(1-2 周就可以足够熟练地工作)。
| 归档时间: |
|
| 查看次数: |
7651 次 |
| 最近记录: |