2016-11-18 6 views
4

QActionをラムダスロットに直接接続するにはどうすればよいですか?QMenu :: addActionをlambdaに直接接続する(関数シグネチャの不一致)

QMenu m; 

ワーキング:

QAction newSubfolder(QIcon(":/icons/newfolder.png"),tr("New Subfolder"),&m); 
m.addAction(&newSubfolder); 
connect(&newSubfolder,&QAction::triggered, 
     this,[this,p](){qDebug()<<"New Subfolder";}); 

に動作していない:

m.addAction(QIcon(":/icons/newfolder.png"),tr("New Subfolder"), 
       [this,p](){qDebug()<<"New Subfolder";}); 

エラー:

No matching function for call to 'QMenu::addAction(QIcon, QString, FolderMenuWidget::showContextMenu(QPoint)::__lambda0)' 
       [this,p](){qDebug()<<"New Subfolder";}); 
                ^

はい、私はエラーメッセージが表示されるが、私は私が必要なものを理解していないがラムダスロットのために変更する。また、メンバーポインタthisをラムダの前に追加すると、動作しません。

これはQt 5.3にあります。

+0

'QMenu :: addAction'にはラムダを必要とするオーバーロードがあります。 – aschepler

+0

ファンクタを使用するAddActionがあります。 '[this、p](bool){qDebug()<<" New Subfolder ";}' –

+0

Qt 5.6では、関数のオーバーライドが新しく追加されました。 –

答えて

3

あなたが探しているオーバーロードがQt 5.6に追加されました。

関連する問題