2015-03-03 53 views
0

的子类,我有相关的信号/槽使用Qt中的连接itemExpanded/C++如何使用QTreeWidgetItem

我已经使用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的事实来了。但是,如果我取代MyQTreeWidgetItem通过QTreeWidgetItem如

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

运行抱怨信号/槽不具有相同的类型,这很正常。

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

连接在QTreeWidget部分完成 任何想法?

感谢

回答

0

你可以像下面

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

谢谢。它是如何工作的?我收到QTreeWidgetItem *项目以及如何动态地投射它。抱歉问。我是C++中的newby/Qt – Seb 2015-03-03 05:21:05

+0

即使您收到QTreeWidgetItem指针,如果您将MyTreeWidgetItem插入到树小部件中,它实际上也指向MyTreeWidgetItem对象。所以你可以动态地将QTreeWidgetItem指针转换为MyTreeWidgetItem指针。 – 2015-03-03 05:23:27