Qt 可以通过函子参数在信号槽连接中使用 lambda 函数如图所示 http://qt-project.org/doc/qt-5.0/qtcore/qobject.html#connect-5。但是如何在 Qt connect 中声明函子参数呢?例如,
QAction* CreateAction(QString text, QObject* parent, Functor functor)
{
QAction* action = new QAction(icon, text, parent);
QObject::connect(action, &QAction::triggered, functor);
return action;
}
问题是如何包含文件以使编译器知道“Functor”类型。
Functor
不是真实类型。它是 Qt 文档的占位符。真实类型是模板类型参数。查看QObject.h
如果你真的感兴趣的话。在实践中,您可以使用std::function http://en.cppreference.com/w/cpp/utility/functional/function,其定义在<functional>
,在其位置。
对于问题中的函数,最简单的更改就是使其成为模板函数:
template<Functor>
QAction* CreateAction(QString text, QObject* parent, Functor&& functor)
{
QAction* action = new QAction(icon, text, parent);
QObject::connect(action, &QAction::triggered, std::forward<Functor>(functor));
return action;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)