我在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部分完成 有什么想法吗?
感谢
答案 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
}
}