FLTK 在按钮释放时从输入中获取值
FLTK Getting value from input on button release
我已经完成了一些教程,当我按下按钮时可以打印一些东西,但是我不知道如何存储插入到输入小部件中的值,将用户购买到一个变量中供我使用.我是 C++ 和 FLTK 的新手,所以我不确定是否有像 Java 扫描仪这样的简单东西可以使用。我假设您会使用 var=input-value();
之类的东西,但我不知道如何在回调中使用它,因为它们只采用某些参数。如:
Fl_Button *butts[2];
static void Button_cb(Fl_Widget * w, void* data){
Fl_Button *b = (Fl_Button*)w;
fprintf(stderr, "Button '%s' was %s\n", b->label(), b->value() ? "Pushed" : "Released");
}
我不能只更换打印线让它工作。 None 我找到并完成的教程解释了这一点。
你的想法太低级了。稍微高一点的使用就可以了:回调是点击操作的结束:不是按下也不是松开。
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Int_Input.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Color_Chooser.H>
struct Info
{
// The widgets
Fl_Input* instr;
Fl_Int_Input* inint;
// Saved values
char sval[40];
int ival;
};
// Callback for the done button
void done_cb(Fl_Widget* w, void* param)
{
Info* input = reinterpret_cast<Info*>(param);
// Get the values from the widgets
strcpy (input->sval, input->instr->value());
input->ival = atoi(input->inint->value());
// Print the values
printf("String value is %s\n", input->sval);
printf("Integer value is %d\n", input->ival);
}
int main(int argc, char **argv)
{
Info input;
// Setup the colours
Fl::args(argc, argv);
Fl::get_system_colors();
// Create the window
Fl_Window *window = new Fl_Window(200, 150);
int x = 50, y = 10, w = 100, h = 30;
input.instr = new Fl_Input(x, y, w, h, "Str");
input.instr->tooltip("String input");
y += 35;
input.inint = new Fl_Int_Input(x, y, w, h, "Int");
input.inint->tooltip("Integer input");
y += 35;
Fl_Button* done = new Fl_Button(x, y, 100, h, "Done");
done->callback(done_cb, &input);
window->end();
window->show(argc, argv);
return Fl::run();
}
我已经完成了一些教程,当我按下按钮时可以打印一些东西,但是我不知道如何存储插入到输入小部件中的值,将用户购买到一个变量中供我使用.我是 C++ 和 FLTK 的新手,所以我不确定是否有像 Java 扫描仪这样的简单东西可以使用。我假设您会使用 var=input-value();
之类的东西,但我不知道如何在回调中使用它,因为它们只采用某些参数。如:
Fl_Button *butts[2];
static void Button_cb(Fl_Widget * w, void* data){
Fl_Button *b = (Fl_Button*)w;
fprintf(stderr, "Button '%s' was %s\n", b->label(), b->value() ? "Pushed" : "Released");
}
我不能只更换打印线让它工作。 None 我找到并完成的教程解释了这一点。
你的想法太低级了。稍微高一点的使用就可以了:回调是点击操作的结束:不是按下也不是松开。
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Int_Input.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Color_Chooser.H>
struct Info
{
// The widgets
Fl_Input* instr;
Fl_Int_Input* inint;
// Saved values
char sval[40];
int ival;
};
// Callback for the done button
void done_cb(Fl_Widget* w, void* param)
{
Info* input = reinterpret_cast<Info*>(param);
// Get the values from the widgets
strcpy (input->sval, input->instr->value());
input->ival = atoi(input->inint->value());
// Print the values
printf("String value is %s\n", input->sval);
printf("Integer value is %d\n", input->ival);
}
int main(int argc, char **argv)
{
Info input;
// Setup the colours
Fl::args(argc, argv);
Fl::get_system_colors();
// Create the window
Fl_Window *window = new Fl_Window(200, 150);
int x = 50, y = 10, w = 100, h = 30;
input.instr = new Fl_Input(x, y, w, h, "Str");
input.instr->tooltip("String input");
y += 35;
input.inint = new Fl_Int_Input(x, y, w, h, "Int");
input.inint->tooltip("Integer input");
y += 35;
Fl_Button* done = new Fl_Button(x, y, 100, h, "Done");
done->callback(done_cb, &input);
window->end();
window->show(argc, argv);
return Fl::run();
}