gpt4 book ai didi

c++ - 使用嵌套类创建到 cpp 类对象的 qml 连接

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:30 27 4
gpt4 key购买 nike

我正在尝试创建一个到我的自定义 cpp 类“EState”的连接。EState 包含三个类,其中两个子类有一些自己的类。

到目前为止,我能够在 QML 中通过以下方式访问变量:

// ...
Estate.B.bSub.targetSpeed = 0
// ...

EState构造函数初始化子类,子类初始化它的子类。

// main.cpp

QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;

EState *state = new EState();


engine.rootContext()->setContextProperty("EState", state);

//主体结束

//顶级类

class EState : public QObject
{
Q_OBJECT
Q_PROPERTY(EAState *A MEMBER mA NOTIFY aChanged)
Q_PROPERTY(EBState *B MEMBER mB NOTIFY bChanged)
Q_PROPERTY(QList<ECState*> Cs MEMBER mCs NOTIFY csChanged)

public:
EState();
~EState(){}

EAState * mA;
EBState * mB;
QList<ECState *> mCs;
ECState *COne;
ECState *CTwo;

signals:
void aChanged();
void bChanged();
void csChanged();
};

EState::EState()
{
mA = new EAState();
mB = new EBState();
COne = new ECState();
CTwo = new ECState();

mCs = {COne, CTwo};
}

//顶级类(class)结束

//中间类

class EBState : public QObject
{
Q_OBJECT
Q_PROPERTY(BSub * bSub MEMBER mBSub NOTIFY bSubChanged)

public:
EBState();
~EBState(){}

BSub * mBSub;

signals:
void bSubChanged();
};

EBState::EBState()
{
mBSub = new BSub();
}

//结束中间类

//最内层

class BSub : public QObject {
Q_OBJECT
Q_PROPERTY(float targetSpeed MEMBER mTargetSpeed NOTIFY targetSpeedChanged)

public:
BSub ()
~BSub (){}
float mTargetSpeed = 0;

signals:
void targetSpeedChanged();
};

MSub::MSub()
{
mTargetSpeed = 0;
}

//最里面的类结束

在 QML 中,我想通过以下方式(或类似方式)接收内部类的信号:

 Connections
{
target: EStates

B.bSub.onTargetSpeedChanged:
{
console.log(targetSpeed);
}
}

当前的错误信息是:qrc:/QML/main. qml: 204 不存在的附加对象

最佳答案

您有 2 个错误:

  • QML 中对象 EState 名称中的拼写错误,因为您将其注册为 EState:setContextProperty("EState", state); 但您将其用作 目标:庄园

  • Connections 目标是指具有信号的对象,即 EState.B.bSub 而不是 EState

综合以上,解决方案是:

Connections
{
target: EState.B.bSub

onTargetSpeedChanged:
{
console.log(EState.B.bSub.targetSpeed);
// or
// console.log(target.targetSpeed);
}
}

关于c++ - 使用嵌套类创建到 cpp 类对象的 qml 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57517210/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com