如何在没有对象的情况下执行插槽功能?

时间:2018-01-16 12:29:25

标签: c++ qt

我有一个带有一些按钮的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;
  }

我怎样才能实现这一目标?

1 个答案:

答案 0 :(得分:1)

通常带有回调的API会提供 void * ,以便您可以提供您的用户数据(您的StartDialog指针),如果情况并非如此,并且您只有单个对话框对象使其在主要内部全局化,这样就可以看到该函数。

C ++ 11方法也可以创建一个lambda作为捕获对话框对象的回调函数。