【发布时间】:2026-02-15 13:10:01
【问题描述】:
我基本上只是想使用多个派生类来更改基类的成员变量并使用 qproperty 将该值转发给 qml,但由于某种原因它不起作用
汽车.h
#include <QObject>
class Car : public QObject{
Q_OBJECT
Q_PROPERTY(int seats MEMBER m_seats NOTIFY updateSeats)
public:
explicit Car(QObject *parent = 0);
~Car();
int m_seats;
Q_INVOKABLE void test();
signals:
void updateSeats();
};
汽车.cpp
#include "car.h"
Car::Car(QObject *parent) :
QObject(parent),
m_seats(0)
{
}
Car::test(){
m_seats = 5;
emit updateSeats();
}
Car::~Car(){}
丰田.h
#include "car.h"
class Toyota : public Car{
Q_OBJECT
public:
explicit Toyota(QObject *parent = 0);
~Toyota();
void foundCar();
};
丰田.cpp
#include "toyota.h"
Toyota::Toyota(QObject *parent)
{
}
Toyota::foundCar(){
m_seats = 4;
emit updateSeats();
}
Toyota::~Toyota(){}
现在,在 Toyota 类中调用 foundCar 函数后,如果我这样做了 qml 中的 console.log(car.seats) 我得到 0,但我希望它是 4,因为我在派生类中修改它。 但是,如果我从 qml 调用 car.test() 然后打印 car.seats,则值为 5。我很困惑为什么会这样。在 qml 中,我希望 car.seats 为 4。我错过了什么?
【问题讨论】:
-
你不是通过这个
startGui函数来启动两个QmlEngine吗?能不能也展示一下main函数? -
我已经编辑了这个问题,基本上启动引擎是主要的,这部分没有问题,因为它适用于我拥有的所有其他类
-
你如何将类/属性暴露给 QML ?
main()在你的代码中在哪里? -
@Gebre 我认为您不应该两次问基本相同的问题。请关闭这个,因为另一个更“MRE”
-
这些问题实际上是关于两个不同的事情。我通过使 m_seats 静态解决了这个问题。但是我不能对信号做同样的事情,qt 不允许。 @Amfasis 当我从派生类发出信号时,它没有更新,因为它是对象丰田,而不是汽车。