如何将itemExpanded与QTreeWidgetItem的子类一起使用

时间:2015-03-03 05:06:16

标签: c++ qt qtreewidget qtreewidgetitem

我在Qt / C ++中有与SIGNAL / SLOT使用相关的连接

我使用QTreeWidget + QTreeWidgetItems编写了一个应用程序。为了满足应用程序的需要,我必须将QTreeWidgetItem子类化为MyQTreeWidgetItem以添加一些参数。

因为我从QTreeWidgetItem类移到MyQTreeWidgetItem类,

connect(this, SIGNAL(itemExpanded(MyQTreeWidgetItem*)),
                 this, SLOT(onSubTreeDisplay(MyQTreeWidgetItem*)));

不再有效了。

问题是

QObject::connect: No such signal PulsTreeWidget::itemExpanded(MyQTreeWidgetItem*) in ../puls_connect/pulstreewidget.cpp:33

我认为问题来自于itemExpanded期望QTreeWidgetItem而不是MyQTreeWidgetItem。但是如果我用QTreeWidgetItem替换MyQTreeWidgetItem,比如

connect(this, SIGNAL(itemExpanded(QTreeWidgetItem*)),
                 this, SLOT(onSubTreeDisplay(MyQTreeWidgetItem*)));

运行抱怨SIGNAL / SLOT没有相同类型且这是正常的。

我的项目是通过MyQTreeWidgetItem定义的,而不是QTreeWidgetItem,因为我有它的子类。

连接在QTreeWidget部分完成 有什么想法吗?

感谢

1 个答案:

答案 0 :(得分:1)

您可以像下面那样进行信号插槽连接

connect(this, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(onSubTreeDisplay(QTreeWidgetItem*)));

然后在onSubTreeDisplay()内,动态投射QTreeWidgetItem参数到MyQTreeWidgetItem,如下所示

void onSubTreeDisplay(QTreeWidgetItem* item)
{
    MyTreeWidgetItem* myItem = dynamic_cast<MyTreeWidgetItem*>(item);
    if (myItem)
    {
        //cast is successful. you can use myItem
    }
}