Tha*_*lia 7 c++ inheritance qt multiple-inheritance
我想为某些对象实现自定义行为.
为此,让我的项目(继承自QGraphicsItem)实现一些接口.
class SomeParentItem
{
SomeParentItem(bool x) { x = true; }
void function1() {}
};
class SomeInterface
{
virtual void function2() = 0;
};
class XYZItem : public QGraphicsXYZItem, public SomeParentItem, public SomeInterface
{
XYZItem(bool x):SomeParentItem(x) {}
virtual void function2() { x = false; }
};
class MPQItem : public QGraphicsMPQItem, public SomeParentItem
{
MPQItem (bool x):SomeParentItem(x) {}
};
Run Code Online (Sandbox Code Playgroud)
从外面看,我以为我就是这么做的
SomeInterface* item1 = dynamic_cast<SomeInterface*>(item);
if(item1 == NULL)
item->function1();
else
item1->function2();
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会崩溃...通常......所以我正在创建一个标志来测试,如果标志是真的,那么只有敢于施放.
但我一直在想,它不应该崩溃.所以我勇敢再次尝试,这次是在一个QWidget孩子.而不是崩溃我得到了
QWidget::insertAction: Attempt to insert null action
Run Code Online (Sandbox Code Playgroud)
这是if(item1 == NULL)给出这个信息的测试......
如何正确检查我的项目是否实现SomeInterface?
注意:item不能为空.
Fré*_*lva -2
一些简单的事情怎么样:
class SomeInterface
{
virtual void function2() = 0;
virtual qint32 role() =0;
};
Run Code Online (Sandbox Code Playgroud)
并为自定义行为返回不同的 int ?
| 归档时间: |
|
| 查看次数: |
1401 次 |
| 最近记录: |