【问题标题】:Processing signal of QTreeWidget that has QTreeWidgetItem derivitives as items以 QTreeWidgetItem 派生作为项目的 QTreeWidget 的处理信号
【发布时间】:2019-01-26 01:42:09
【问题描述】:

我没有找到解决这个问题的合适方法,所以我希望有人能给我一个答案:

我使用的是普通的 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() ));

}

我已经在尝试将可以从信号中获取的项目转换为我自己的子类,但从未调用 slot 函数,因为来自我的 cout 行的测试不会出现在控制台中。

我非常感谢每一个帮助!

【问题讨论】:

标签: qt qt-signals qtreewidget qtreewidgetitem


【解决方案1】:

问题是您的SIGNAL 规范不正确,

SIGNAL(itemClicked(QTreeWidgetItem *))

您可能应该在控制台上看到一条警告消息,内容如下:

QObject::connect: 没有这样的信号 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);

【讨论】:

  • 谢谢,项目的子类实际上不是问题!它完全忘记了,它可能与缺少的列参数有关。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-05-23
  • 2018-05-04
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多