2013-03-16 108 views
1

Qt可以使用仿函数参数as shown here在信号插槽连接中使用lambda函数。但如何在Qt连接中声明函子参数?例如,如何在Qt连接中声明函数参数?

QAction* CreateAction(QString text, QObject* parent, Functor functor) 
{ 
    QAction* action = new QAction(icon, text, parent); 
    QObject::connect(action, &QAction::triggered, functor); 
    return action; 
} 

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

+0

哪里是你的'Functor'类型声明? – 2013-03-16 13:23:11

+0

Qt声明了类型Functor,如其文档所示。但我找不到它在哪里宣布。 – user1899020 2013-03-16 13:25:23

回答

1

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

+0

我认为这个答案更有用,如果它包含一个示例代码片段。 – 2015-12-04 09:58:30

-1

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

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

下面是从文档的例子:

void someFunction(); 
QPushButton *button = new QPushButton; 
QObject::connect(button, &QPushButton::clicked, someFunction); 
+2

这不是一个空白*。阅读标题。 http://qt.gitorious.org/qt/qtbase/blobs/stable/src/corelib/kernel/qobject.h#line243 – 2013-03-16 16:30:15