2013-03-16 80 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