4

在我的 Qt 5.6 程序中,我需要连接QMenuClick ( QAction) 来运行并提供一些参数。我可以在没有参数的情况下连接到函数并且它正在工作:

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

但是,当我尝试添加一些参数时:

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

我收到一个错误:

C2664:“QMetaObject::Connection QObject::connect(const QObject *,const char *,const char ,Qt::ConnectionType) const”:无法从“void (__thiscall QAction:: )(bool)”转换 arg 2到“常量字符 *”

我的示例函数:

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

谢谢你的任何建议。

4

2 回答 2

10

function(arguments)是一个函数调用,你想将函数绑定到参数并创建新的可调用对象,使用std::bind

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

或者您可以使用lambda 函数

connect(MyAction, &QAction::triggered, [this]()
{
    function(arguments);
});
于 2016-04-19T17:49:45.467 回答
4

你想使用std::bind如下:

connect(MyAction, &QAction::triggered, std::bind(&function, x, y, z));
于 2016-04-19T17:48:05.737 回答