【发布时间】:2014-11-21 15:10:33
【问题描述】:
我使用的是 c++11 的连接语法,并且使用这个连接语句得到以下错误:
connect(fileSystemCompleter, &QCompleter::activated, [&] (QModelIndex index)
{
fileSystemPathEdit->setFocus(Qt::PopupFocusReason);
});
错误:
error C2664: 'QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const' : cannot convert parameter 2 from 'overloaded-function' to 'const char *'
Context does not allow for disambiguation of overloaded function
是否有可能以某种方式重写它以便编译器可以消除重载函数的歧义?
编辑:
来自 Qt 项目...
重载
您可能在示例中看到,连接到 QAbstractSocket::error 不是很漂亮,因为错误有一个超载,并且采取 重载函数的地址需要显式转换。
一些宏可能会有所帮助(使用 c++11 或 typeof 扩展)
最好的办法可能是建议不要使信号过载或 插槽……
...但是我们在过去的 Qt 小版本中一直在添加重载 因为获取函数的地址不是我们的用例 支持。但是现在如果不破坏源头,这将是不可能的 兼容性。
你知道这个宏到底是什么样子的吗?或者如何进行显式转换?
【问题讨论】: