C++ 要想使成员函数 设成回调函数 ,查资料一般都把函数设成static 类型或什么友元函数。如果设成 static类型 涉及到UI界面更新的话,UI元素也要写成static 的 比较麻烦。
以前用信号槽更新界面内容,今天尝试用回调,总结了一下 步骤:
主界面有个函数如:
void MainWindow::recerve(QString str){ //用来更新界面,我想在其他线程或其他对象中使用这个函数来更新界面
ui->lineEdit->setText(str);
}
首先用std::function设置函数类型void(QString) 再用std::bind 绑定要调用的类成员函数 如下
主程序代码
std::function<void(QString)> to_mail;
to_mail=std::bind(&MainWindow::recerve,this,std::placeholders::_1);
_rmc->setCallback(to_mail);//这句就是把这个函数指针变量传到想要使用的类_rmc中 然后那个类中就可以使用这个函数了 和传变量一样的道理 这个_rmc类中有个一样的类型的函数指针std::function<void(QString)>
绑定完后to_mail变量相当于指向MainWindow::recerve(QString str)的函数指针
然后再把这个函数指针变量传到想要使用的类中,即要使用这个函数的地方 一般人们都叫他回调 就是传个函数指针变量
到这里主程序代码就完成了
使用回调函数的类中代码:
头文件
public:
std::function<void(QString)> m_callbackFunc;
void setCallback(std::function<void(QString)>);
实现:
void ReadMailCode::setCallback(std::function<void(QString)> m_fun)
{
m_callbackFunc=m_fun;
}
可以了 在这个类的对象中可以随便使用m_callbackFunc()函数了 就相当于使用 MainWindow::recerve(QString str)函数