2016-04-19 2 views
2

Dans mon programme Qt 5.6, je dois me connecter QMenu Cliquez sur (QAction) pour fonctionner et fournir des arguments. Je peux me connecter à fonctionner sans arguments et il fonctionne:Qt connect QAction pour fonctionner avec des arguments

connect(MyAction, &QAction::triggered, function); 

Mais, quand je suis en train d'ajouter quelques arguments:

connect(MyAction, &QAction::triggered, function(arguments)); 

Je reçois une erreur:

C2664: "QMetaObject::Connection QObject::connect(const QObject *,const char *,const char ,Qt::ConnectionType) const": can't convery arg 2 from "void (__thiscall QAction::)(bool)" to "const char *"

Mon exemple fonction:

void fuction(char x, char y, int z); 

Merci pour tout conseil.

Répondre

4

function(arguments) est un appel de fonction, vous voulez lier les arguments à la fonction et créer un nouvel objet appelable à la place, à l'aide std::bind:

connect(MyAction, &QAction::triggered, std::bind(function, arguments)); 

ou vous pouvez utiliser un lambda function:

connect(MyAction, &QAction::triggered, [this]() 
{ 
    function(arguments); 
}); 
+1

Merci, ça a résolu mon problème :) – km2442

3

Vous voulez utiliser std::bind comme dans:

connect(MyAction, &QAction::triggered, std::bind(&function, x, y, z));