在QML中访问C ++对象的成员变量

时间:2015-09-29 15:15:03

标签: c++ qt object qml

有没有办法在QML中访问C ++对象的成员变量?在main.cpp中,我将一个对象暴露给QML。如何在QML中访问controller.x

Controller ctrl;
QQuickView view;
QQmlContext* ctx = view.rootContext();
ctx->setContextProperty("controller", &ctrl);

在控制器中:

public:
 int x;

2 个答案:

答案 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()