QML:如何从C ++子类调用方法?

时间:2016-04-17 02:46:16

标签: c++ qt qml

我有两个C ++类(TrafficLight和Light)。 Light是TrafficLight的孩子。 QML可以看到来自TrafficLight的所有内容,也可以看不到Light中的任何内容,例如......当我尝试从Light TrafficLight.get_light(0).get_color()

访问Light时,我收到以下错误
TypeError: Cannot call method 'get_color' of undefined

我将我的父类(TrafficLight)暴露给qml(参见下面的主要内容)。我认为它会暴露它内部的子类......但显然不是。

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include "traffic_light.h"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;

    Traffic_Light traffic_light;

    engine.rootContext()->setContextProperty("TrafficLight", &traffic_light);

    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

我的问题是如何公开子类?我不能只创建Light的实例并以与TrafficLight相同的方式公开它。原因是它与TrafficLight内部的Light不同。 :(

light.h

#ifndef LIGHT_H
#define LIGHT_H

#include <QDebug>
#include <QObject>

enum Color
{
    RED = 0,
    YELLOW,
    GREEN
};

class Light : public QObject{
    Q_OBJECT
public:
    Light();
public slots:
    void set_color(Color color);
    int get_color();
    void set_light(bool is_on);
    bool get_light();
private:
    Color m_color;
    bool m_light_on;
};

#endif // LIGHT_H

traffic_light.h

#ifndef TRAFFIC_LIGHT_H
#define TRAFFIC_LIGHT_H

#include <QDebug>
#include <QObject>
#include <QTimer>
#include "light.h"

class Traffic_Light : public QObject
{
    Q_OBJECT
public:
    Traffic_Light();

public slots:
    Light &get_light(int index);
    void toggle_light(int index);

private:
    Light m_light[3];
};
#endif // TRAFFIC_LIGHT_H

0 个答案:

没有答案