我确实有一个与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
}
}