【问题标题】:How to connect signal to signal with new syntax QT5?如何使用新语法 QT5 将信号连接到信号?
【发布时间】:2020-09-20 19:19:41
【问题描述】:

我正在尝试使用新语法将信号连接到信号:

connect(ui->line,&QLineEdit::returnPressed,ui->button,&QPushButton::clicked);

但是编译器会抛出一个错误,所有这些旧语法都有效:

connect(ui->line,SIGNAL(returnPressed()),ui->button,SIGNAL(clicked()));

我知道这可以连接到功能点击:

connect(ui->line,&QLineEdit::returnPressed,ui->button,&QPushButton::click);

但是有没有办法将它连接到使用新语法的信号?

【问题讨论】:

  • 向我们展示您遇到的错误。是因为clicked 采用了bool 参数,而returnPressed 信号中不存在?
  • @Botje 静态断言失败:插槽需要的参数多于信号提供的参数。 -- 静态断言失败:信号和槽参数不兼容。 -- 但是为什么旧的语法会起作用呢?

标签: c++ qt qt5 signals-slots


【解决方案1】:

快速浏览文档,不匹配源于clickedsignal 的额外参数。

一种选择是使用 lambda 注入该参数:

connect(ui->line,&QLineEdit::returnPressed, this, [this]() { ui->button->clicked(false); });

【讨论】:

  • 只有一件事。从问题来看,@Artem072 似乎想要在触发returnPressed 时发出clicked(true)。我说的对吗?
  • @Botje ui 不能被捕获,因为它是一个成员变量,您需要捕获它才能在您的 lambda 中访问它。此外,您调用 ui->clicked(false); 而不是按钮方法:ui->button->clicked(false);
  • 我自己犯了一个错误,假设我们不需要传递目标参数。我把它放回去了(原因here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 2014-11-10
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多