我有一个带有一些按钮的Qt应用程序,当点击它们时,执行它各自的插槽功能。
现在我想自动执行一些插槽功能,而不需要点击。例如,这可以执行OK操作:
int main(int argc, char* argv[])
{
MFCApplication app(argc, argv);
StartDialog dialog;
dialog.slot_function_OK_button(); //Automatically clicks OK button
// initialise ROS and start spinning
ros::init(argc, argv, "platero_ros");
//ROS UI service
ros::NodeHandle n;
ros::ServiceServer service = n.advertiseService("UIservice", UIcommand);
ROS_INFO("Ready to receive ROS messages to interact with UI.");
ros::AsyncSpinner spinner(1); // start ros loop
spinner.start();
dialog.show();
return app.exec();
return 0;
}
现在不是在main函数中,我想在UIcommand回调中自动执行槽函数
//rosui
bool UIcommand(project_ros::UIservice::Request &req,
project_ros::UIservice::Response &res)
{
res.response_string = std::string(req.ui_command.c_str()) + " command was received";
// I would like to do dialog.slot_function_OK_button() here but dialog is not in this scope
ROS_INFO("%s", res.response_string.c_str());
return true;
}
我怎样才能实现这一目标?
答案 0 :(得分:1)
通常带有回调的API会提供 void * ,以便您可以提供您的用户数据(您的StartDialog指针),如果情况并非如此,并且您只有单个对话框对象使其在主要内部全局化,这样就可以看到该函数。
C ++ 11方法也可以创建一个lambda作为捕获对话框对象的回调函数。