我确实有一个与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部分完成
任何想法 ?

谢谢

最佳答案

您可以如下进行信号插槽连接

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

10-06 11:24