有没有办法在QML中访问C ++对象的成员变量?在main.cpp
中,我将一个对象暴露给QML。如何在QML中访问controller.x
?
Controller ctrl;
QQuickView view;
QQmlContext* ctx = view.rootContext();
ctx->setContextProperty("controller", &ctrl);
在控制器中:
public:
int x;
答案 0 :(得分:6)
将C ++成员声明为property:
class Controller : public QObject
{
Q_OBJECT
Q_PROPERTY(int x MEMBER x NOTIFY xChanged)
// ...
signals:
void xChanged();
private:
int x;
};
您还需要声明一个信号,这是NOTIFY
功能所指的信号。这将让QML知道属性的值何时发生变化:
如果未指定READ访问器函数,则需要MEMBER变量关联。这使得给定成员变量可读写,而无需创建READ和WRITE访问器函数。如果你需要控制变量访问,除了MEMBER变量关联(但不是两者)之外,它仍然可以使用READ或WRITE访问器函数。
然后在QML中访问它,如下所示:
controller.x
答案 1 :(得分:3)
如果您不想使用属性绑定,则可以执行此操作。
class Controller : public QObject
{
Q_ObJECT
public:
Q_INVOKABLE int getX() const { return x; }
private:
int x;
}
你的QML中的
controller.getX()