我很难解释这个具体难题,因此我将尽力而为。
在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保持完整?
最佳答案
我不知道Qq,但是您可以尝试执行适当的dynamic_cast<>
,它将验证对象是否实际上是MyQTreeWidgetItem*
(否则返回0),以及正确执行指针转换(我不确定C样式是否强制转换返回QObject
的地址)。您可以打印出指针,也可以对这个问题有更多的了解。