【问题标题】:Qt signals slots, cast type in new notation [duplicate]Qt 信号槽,以新符号转换类型 [重复]
【发布时间】:2015-04-12 12:05:04
【问题描述】:

鉴于以下两个:

connect(ui->comboBox, SIGNAL(activated(QString)), ps, SLOT(requestPlotsAvailable(QString)));
connect(ui->comboBox, &QComboBox::activated, ps, &PlotSystem::requestPlotsAvailable);

第一个使用旧的符号,它有效。第二个使用新符号并给出错误

error: no matching function for call to 'PlotSystemGui::connect(QComboBox*&, <unresolved overloaded function type>)'

如何避免使用新符号的错误?

【问题讨论】:

  • @hyde,抱歉,打错了。

标签: c++ qt


【解决方案1】:

这应该可以工作

connect(ui->comboBox, 
        static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::activated),
        ps,
        &PlotSystem::requestPlotsAvailable);

为了方便/可读性,Qt 5.7 引入了qOverload (or QOverload for C++11):

connect(ui->comboBox, 
        qOverload<const QString &>(&QComboBox::activated),
        ps,
        &PlotSystem::requestPlotsAvailable);

参见this关于重载函数指针的问题

【讨论】:

  • 它返回另一个错误:没有匹配转换函数'激活'到类型'void (class QComboBox::*)(class QString)'
  • 是的,因为它应该是 const QString &amp; 而不是 QString。 (编辑答案)
  • 问题是,如第一条消息中所述,编译器无法解析要采用哪些重载函数。所以static_cast需要明确告知。
  • 感谢您的解释,我想我明白了这个问题。
  • 假设我想将一个 int 信号与一个 QString 插槽链接,是否可以链接不同的类型?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 2012-09-11
  • 2021-02-12
相关资源
最近更新 更多