我很难解释这个具体难题,因此我将尽力而为。

在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的地址)。您可以打印出指针,也可以对这个问题有更多的了解。

10-05 18:04