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