具有 QTreeWidgetItem 派生项作为项目的 QTreeWidget 的处理信号
Processing signal of QTreeWidget that has QTreeWidgetItem derivitives as items
我没有找到解决这个问题的合适方法,所以我希望有人能给我一个问题的答案:
我使用的是普通 QTreeWidget,但作为项目,我使用 QTreeWidgetItem 自己的子类(因为我需要在项目中存储一些其他信息)。现在我想通过 QTreeWidget 使用 itemClicked() 信号,但我认为我的插槽没有收到任何信号,我认为它与 itemClicked() 的签名有关,因为它发送了一个 QTreeWidgetItem,当然不是我的自己的子类。
QTreeWidget 是否可能检测不到对我自己的子类项目的点击?
这是我的连接:
connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem *)), this, SLOT(displayTransformData(QTreeWidgetItem*)));
这是我的位置:
void GUI::displayTransformData(QTreeWidgetItem* item) {
cout << "test" endl;
Q_actorTreeWidgetItem* actor_item = dynamic_cast<Q_actorTreeWidgetItem*>(item);
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor = actor_item->getActorReference();
double* position = new double[3];
position = actor->GetOrigin();
x_loc->setText(QString(std::to_string( position[0]).c_str() ));
}
我已经在尝试将我可以从信号中获得的项目转换为我自己的子类,但是槽函数从未被调用,因为来自我的 cout 行的测试没有出现在控制台中。
非常感谢您的每一次帮助!
问题是您的 SIGNAL
规格不正确,
SIGNAL(itemClicked(QTreeWidgetItem *))
您应该会在控制台看到一条警告消息,内容如下:
QObject::connect: No such signal
tree_widget::itemClicked(QTreeWidgetItem *) in ...
根据documentation,实际信号规格是
void QTreeWidget::itemClicked(QTreeWidgetItem *item, int column)
因此,使用您需要的旧 Qt4
语法
connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem *, int)),
this, SLOT(displayTransformData(QTreeWidgetItem*)));
但是,如果可能,您应该使用较新的 Qt5
signal/slot syntax
connect(treeWidget, &QTreeWidget::itemClicked, this, &GUI::displayTransformData);
我没有找到解决这个问题的合适方法,所以我希望有人能给我一个问题的答案:
我使用的是普通 QTreeWidget,但作为项目,我使用 QTreeWidgetItem 自己的子类(因为我需要在项目中存储一些其他信息)。现在我想通过 QTreeWidget 使用 itemClicked() 信号,但我认为我的插槽没有收到任何信号,我认为它与 itemClicked() 的签名有关,因为它发送了一个 QTreeWidgetItem,当然不是我的自己的子类。
QTreeWidget 是否可能检测不到对我自己的子类项目的点击?
这是我的连接:
connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem *)), this, SLOT(displayTransformData(QTreeWidgetItem*)));
这是我的位置:
void GUI::displayTransformData(QTreeWidgetItem* item) {
cout << "test" endl;
Q_actorTreeWidgetItem* actor_item = dynamic_cast<Q_actorTreeWidgetItem*>(item);
vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor = actor_item->getActorReference();
double* position = new double[3];
position = actor->GetOrigin();
x_loc->setText(QString(std::to_string( position[0]).c_str() ));
}
我已经在尝试将我可以从信号中获得的项目转换为我自己的子类,但是槽函数从未被调用,因为来自我的 cout 行的测试没有出现在控制台中。
非常感谢您的每一次帮助!
问题是您的 SIGNAL
规格不正确,
SIGNAL(itemClicked(QTreeWidgetItem *))
您应该会在控制台看到一条警告消息,内容如下:
QObject::connect: No such signal tree_widget::itemClicked(QTreeWidgetItem *) in ...
根据documentation,实际信号规格是
void QTreeWidget::itemClicked(QTreeWidgetItem *item, int column)
因此,使用您需要的旧 Qt4
语法
connect(treeWidget, SIGNAL(itemClicked(QTreeWidgetItem *, int)),
this, SLOT(displayTransformData(QTreeWidgetItem*)));
但是,如果可能,您应该使用较新的 Qt5
signal/slot syntax
connect(treeWidget, &QTreeWidget::itemClicked, this, &GUI::displayTransformData);