FLTK中如何在将数据从一个回调函数传递到另一个回调函数的实例
时间: 2023-05-28 09:06:30 浏览: 102
函数传递的例子
可以使用全局变量或者类成员变量来实现在回调函数之间传递数据。
使用全局变量:
```c++
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
int data = 0;
void button_callback(Fl_Widget* widget, void* data)
{
// 修改全局变量的值
::data = 123;
}
void window_callback(Fl_Widget* widget, void* data)
{
// 使用全局变量的值
std::cout << "data = " << ::data << std::endl;
}
int main(int argc, char** argv)
{
Fl_Window window(300, 200);
Fl_Button button(100, 100, 100, 50, "Button");
button.callback(button_callback);
window.callback(window_callback);
window.show();
return Fl::run();
}
```
使用类成员变量:
```c++
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
class MyButton
{
public:
MyButton() : data_(0) {}
void set_data(int data) { data_ = data; }
int get_data() const { return data_; }
static void button_callback(Fl_Widget* widget, void* data)
{
MyButton* button = static_cast<MyButton*>(data);
// 修改类成员变量的值
button->set_data(123);
}
private:
int data_;
};
void window_callback(Fl_Widget* widget, void* data)
{
MyButton* button = static_cast<MyButton*>(data);
// 使用类成员变量的值
std::cout << "data = " << button->get_data() << std::endl;
}
int main(int argc, char** argv)
{
Fl_Window window(300, 200);
MyButton button;
button.set_label("Button");
button.set_position(100, 100);
button.set_size(100, 50);
button.callback(MyButton::button_callback, &button);
window.callback(window_callback, &button);
window.show();
return Fl::run();
}
```
阅读全文