首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Qt connect中声明functor参数?

如何在Qt connect中声明functor参数?
EN

Stack Overflow用户
提问于 2013-03-16 21:21:45
回答 2查看 3.7K关注 0票数 4

通过函数参数as shown here,Qt可以在信号槽连接中使用λ函数。但是如何在Qt connect中声明functor参数呢?例如,

代码语言:javascript
复制
QAction* CreateAction(QString text, QObject* parent, Functor functor)
{
    QAction* action = new QAction(icon, text, parent);
    QObject::connect(action, &QAction::triggered, functor);
    return action;
}

问题是如何包含文件,让编译器知道"Functor“类型。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-17 00:05:48

Functor不是真正的类型。它是Qt文档的占位符。真正的类型是模板类型参数。如果您真的感兴趣,请查看QObject.h。实际上,您可以使用在<functional>中定义的std::function来代替它。

对于问题中的函数,最简单的更改是将其设置为模板函数:

代码语言:javascript
复制
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;
}
票数 3
EN

Stack Overflow用户

发布于 2013-03-17 00:06:24

http://qt-project.org/doc/qt-5.0/qtcore/qobject.html#connect-5

函数器只是一个void *或空指针。它可能需要静态的。这看起来类似于常规的回调函数。

以下是文档中的示例:

代码语言:javascript
复制
void someFunction();
QPushButton *button = new QPushButton;
QObject::connect(button, &QPushButton::clicked, someFunction);
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15449792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档