【发布时间】:2011-02-09 06:20:06
【问题描述】:
这个具体的难题我很难解释,所以我会尽力而为。
在Qt框架中,有2个类:QTreeWidget和QTreeWidgetitem。
我对 QTreeWidgetitem 进行了子类化:
class MyQTreeWidgetitem : public QObject, public QTreeWidgetitem
{
...
public:
int myCustomVariable;
}
我将它添加到 QTreeWidget 做类似的事情:
MyQTreeWidgetitem *item = new MyQTreeWidgetitem;
item->myCustomVariable = 10;
tree->addTopLevelItem(item);
现在,如果我需要调用 tree->topLevelItem(x),我得到的只是 QTreeWidgetitem*。
但是,我所追求的是 MyQTreeWidgetitem* 所以我:
MyQTreeWidgetItem *theitem = (MyQTreeWidgetItem*)tree->topLevelItem(n);
问题在于 theitem->myCustomVariable 不再等于 10。
有没有办法让 MyQTreeWidgetitem 保持完整?
【问题讨论】:
-
您确定
tree->topLevelItem(n);是您添加的原始对象吗? -
是的.. 而 templatetypedef 的回答让我进一步挖掘。 dynamic_cast 确实有效(!= 0)。在我的班级进一步调查后,数据(和其他所有内容)确实保持不变。我希望我可以删除这个问题。
-
@ShiGon- 功劳属于托尼,而不是我。我只是对他的答案进行了轻微的格式清理,使其看起来更闪亮。 :-)
-
你仍然应该接受这个答案,因为它确实帮助你解决了问题。
-
嗯,这很令人困惑.. Tony 回答了但 templatetypedef 已编辑?
标签: c++ qt inheritance casting