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

How to used itemExpanded with a subclass of QTreeWidgetItem

我确实有一个与 SIGNAL/SLOT 在 Qt/C++

中使用相关的联系

我使用 QTreeWidget + QTreeWidgetItems 编写了一个应用程序。为了应用程序的需要,我不得不将class QTreeWidgetItem 子class 到MyQTreeWidgetItem 以添加一些参数。

自从我从 QTreeWidgetItem class 移动到 MyQTreeWidgetItem class,

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 定义的,因为我有 subclass 它。

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

谢谢

您可以像下面这样连接信号槽

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
    }
}