【问题标题】:Using the slot setText(const QString &text)使用插槽 setText(const QString &text)
【发布时间】:2019-03-07 10:53:57
【问题描述】:

我想使用插槽setText(const QString &text)

     QObject::connect(ui->treeWidget, SIGNAL(itemSelectionChanged()), ui->textEdit, SLOT(setText(const QString &text)));

我可以将要显示在我的QTextEdit 中的文本放在哪里?

我有一个QTreeWidget,我想显示currentitem()

【问题讨论】:

  • 请比较QTreeWidget::itemSelectionChangedQTextEdit::setText() 的签名 - 它们不匹配。因此,事情并没有那么简单。您必须编写一个函数(或 lambda)从树小部件中检索当前项目的文本,以将其传递给 QTextEdit
  • 我该怎么做?我必须写新的信号?谢谢
  • 从Qt5开始,任何匹配的函数/成员函数都可以作为slot。因此,一种选择是使用 lambda 作为发送方和接收方之间的适配器(如 Romha 的回答所示)。它被称为“适配器”,因为它使不匹配的槽函数签名适应信号所需的签名。您不需要新信号或新插槽 - 您只需将现有插槽包装在 lambda 中,它会转换(或丰富)插槽的必要信息。顺便提一句。你正在使用 Qt5 吗? Qt4 还没有提供这些功能。

标签: c++ qt signals-slots slot


【解决方案1】:

您必须在调用插槽时设置参数值。如果你使用Qt5,你可以使用lambda:

connect(ui->treeWidget, &QTreeWidget::itemSelectionChanged,
[=] { ui->textEdit->setText(ui->treeWidget->currentItem()->text(); });

【讨论】:

  • 它说的是预期的表达,这是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 2015-11-06
  • 1970-01-01
  • 2021-02-06
相关资源
最近更新 更多