QObject基类的C ++类型转换为继承的对象

时间:2015-02-16 13:57:00

标签: c++ qt class inheritance type-conversion

我有类A(..):QObject(..)B(..):A(..)并创建一个对象A,以后应该转换/扩展到类型B:

A* obA = new A(...);
obA->setMember(true);
...
#ifdef EITHER
obA = new B(...); // --> shouldBeTrue == false, see below
#else
*obA = B(...);  // --> Error - see question
#endif
bool shouldBeTrue = obA->getMember();

原因是我在创建基础对象时还不知道最终类型。我希望能够使用更精细的类型扩展此对象,然后可以访问基础对象成员。

我理解C ++支持类型转换,但我的代码会导致错误,因为它调用QObject的复制操作符,故意将其设置为私有以防止复制QObject"树"。

这是一个概念性问题吗?我的指针错了吗?

<小时/> 编辑:添加替代行,编译但不按预期执行。

1 个答案:

答案 0 :(得分:0)

克隆QObject是概念错误。请参阅:QObject documentation

要从A : public QObject的新实例访问B : public A的现有实例,您可以将指向现有实例的指针传递给构造函数中的新实例。

A *a = new A();
B *b = new B(a);

B的构造函数中,您可以使用A的实例执行任何操作,例如复制其数据部分。