0

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

谢谢

4

1 回答 1

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
    }
}
于 2015-03-03T05:18:23.440 回答