大家好,我是FLTK的新手,现在我有一个非常简单的程序,如果你运行这个程序,点击create然后robot part,你会看到几个选项选择一个。将打开一个新窗口,其中包含几个FL_Input框和一个回调按钮,以便当用户按enter时,在FL_Input框中输入的文本将保存为字符串,例如,有人在FL_Input中输入空格头,然后将该值分配给字符串。我基本上不需要关于回调的帮助,只要设置一个等于FL_Input的字符串即可。非常感谢您的帮助
#include <iostream>
#include <sstream>
#include <stdio.h>
#include <FL/Fl.H>
#include <FL/Fl_Text_Display.H>
#include <FL/fl_draw.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Window.H>
#include <FL/filename.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Slider.H>
#include <string>
#include <FL/Fl_Int_Input.H>
#include <list>
#include <FL/Fl_Color_Chooser.H>
#include <vector>
#include <FL/Fl_Button.H>
#include <FL/Fl_Check_Button.H>
#include <FL/Fl_Tabs.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Menu_Bar.H>
#include <FL/Fl_Output.H>
#include <cstdlib>
using namespace std;
void Change_CB(Fl_Widget *w, void *) {
Fl_Menu_Bar *menu = (Fl_Menu_Bar*)w;
Fl_Menu_Item *p;
// Change submenu name
p = (Fl_Menu_Item*)menu->find_item("Edit/Submenu");
if (p) p->label("New Submenu Name");
// Change item name
p = (Fl_Menu_Item*)menu->find_item("Edit/New Submenu Name/Aaa");
if (p) p->label("New Aaa Name");
}
void Quit_CB(Fl_Widget *, void *) {
exit(0);
}
void head_window(Fl_Widget *, void *) {
Fl_Window *head = new Fl_Window(300, 200, "Head");
Fl_Input *input = new Fl_Input(110, 0, 100, 30, "Name");
Fl_Input *input1 = new Fl_Input(110, 40, 100, 30, "Part-Number");
Fl_Input *input2 = new Fl_Input(110, 80, 100, 30, "Weight");
Fl_Input *input3 = new Fl_Input(110, 120, 100, 30, "Cost");
Fl_Button *enter = new Fl_Button(110, 160, 100, 30, "Enter");
head->show();
}
void torso_window(Fl_Widget *, void *) {
Fl_Window *head = new Fl_Window(350, 250, "Torso");
Fl_Input *input = new Fl_Input(150, 0, 100, 30, "Name");
Fl_Input *input1 = new Fl_Input(150, 40, 100, 30, "Part-Number");
Fl_Input *input2 = new Fl_Input(150, 80, 100, 30, "Weight");
Fl_Input *input3 = new Fl_Input(150, 120, 100, 30, "Cost");
Fl_Input *input4 = new Fl_Input(150, 160, 100, 30, "Battery Compartments");
Fl_Button *enter = new Fl_Button(150, 200, 100, 30, "Enter");
head->show();
}
void locomotor_window(Fl_Widget *, void *) {
Fl_Window *head = new Fl_Window(350, 300, "Locomotor");
Fl_Input *input = new Fl_Input(150, 0, 100, 30, "Name");
Fl_Input *input1 = new Fl_Input(150, 40, 100, 30, "Part-Number");
Fl_Input *input2 = new Fl_Input(150, 80, 100, 30, "Weight");
Fl_Input *input3 = new Fl_Input(150, 120, 100, 30, "Cost");
Fl_Input *input4 = new Fl_Input(150, 160, 100, 30, "Speed(MPH)");
Fl_Input *input5 = new Fl_Input(150, 200, 100, 30, "Power Consumed(W)");
Fl_Button *enter = new Fl_Button(150, 240, 100, 30, "Enter");
head->show();
}
void arm_window(Fl_Widget *, void *) {
Fl_Window *head = new Fl_Window(350, 250, "Arm");
Fl_Input *input = new Fl_Input(150, 0, 100, 30, "Name");
Fl_Input *input1 = new Fl_Input(150, 40, 100, 30, "Part-Number");
Fl_Input *input2 = new Fl_Input(150, 80, 100, 30, "Weight");
Fl_Input *input3 = new Fl_Input(150, 120, 100, 30, "Cost");
Fl_Input *input4 = new Fl_Input(150, 160, 100, 30, "Power Consumed(W)");
Fl_Button *enter = new Fl_Button(150, 200, 100, 30, "Enter");
head->show();
}
void battery_window(Fl_Widget *, void *) {
Fl_Window *head = new Fl_Window(350, 250, "Battery");
Fl_Input *input = new Fl_Input(150, 0, 100, 30, "Name");
Fl_Input *input1 = new Fl_Input(150, 40, 100, 30, "Part-Number");
Fl_Input *input2 = new Fl_Input(150, 80, 100, 30, "Weight");
Fl_Input *input3 = new Fl_Input(150, 120, 100, 30, "Cost");
Fl_Input *input4 = new Fl_Input(150, 160, 100, 30, "Energy Stored");
Fl_Button *enter = new Fl_Button(150, 200, 100, 30, "Enter");
head->show();
}
void manual_window(Fl_Widget *, void *) {
Fl_Window *win = new Fl_Window(400, 275);
Fl_Text_Buffer *buff = new Fl_Text_Buffer();
Fl_Text_Display *disp = new Fl_Text_Display(20, 20, 350 , 250 , "Manual");
disp->buffer(buff);
win->resizable(*disp);
win->show();
buff->text("You may click the file button to open a dropdown\nmenu and you will get a button to exit the window\nor press CTRL + v\n"
"You may click create and you get two options either\nto make a robot part or robot model\n"
"Clicking on robot part that shows the parts you may\ncreate and their associated shortcuts\n"
"If you have any questions click help then click on\nmanual to open the manual\n"
);
win->show();
}
int main() {
Fl_Window *win = new Fl_Window(600, 300, "Robot Shop" );
Fl_Menu_Bar *menu = new Fl_Menu_Bar(0, 0, 600, 25);
menu->add("File/Quit", FL_CTRL + 'v', Quit_CB);
menu->add("Create/Robot Part/Head" , FL_CTRL + 'h' , head_window );
menu->add("Create/Robot Part/Torso" , FL_CTRL + 't' , torso_window);
menu->add("Create/Robot Part/Arm" , FL_CTRL + 'a' , arm_window);
menu->add("Create/Robot Part/Battery" , FL_CTRL + 'b' , battery_window);
menu->add("Create/Robot Part/Locomotor" , FL_CTRL + 'l' , locomotor_window);
menu->add("Create/Robot Model");
menu->add("Help/Manual", FL_CTRL + 'm' , manual_window);
win->show();
return(Fl::run());
}发布于 2016-12-29 02:20:51
抱歉,这是来晚了,但我认为下面的工作。
Fl_Input * inp1; //This is a global declaration
Fl_Button * sav1;
static void sav1_cb(Fl_Button *theButton, void*) // The callback function
{
string Surname = inp1 -> value();
cout << Surname;
}
inp1 = new Fl_Input (170+100, 50, 200, 20,"Surname"); // The input field which must be in a window
sav1 = new Fl_Button (170+310, 50 + 280, 100, 30,"Save"); // The save button
sav1->callback((Fl_Callback*)sav1_cb); //Attaching the callback to the save button需要注意的是,"value()“函数是我用来操作输入字段中存储或写入的数据的函数。这只是一个样本。希望能有所帮助。
发布于 2016-11-09 14:21:12
您需要将数据存储在某个地方。建议这样做:
enum EData
{
EDHeadWeight,
EDHeadCost,
...
EDMax
};
std::string data[EDMax];选项1:将Fl_Button (enter)更改为Fl_Return_Button,然后设置按钮的回调以保存所有值。这假设当用户按return时,他们已经输入了所有的值。
选项2:如果您想在每个输入上捕获enter,请使用when(FL_WHEN_ENTER_KEY)
Fl_Input *input4 = new Fl_Input(150, 160, 100, 30, "Battery Compartments");
input4->when(FL_WHEN_ENTER_KEY);
input4->callback(grab, &data[EDTorsoBattery]);
...
void grab(Fl_Widget* w, void* param)
{
std::string& rv = *((std::string*)param);
Fl_Input* inp = dynamic_cast<Fl_Input*>(w);
rv = inp->value();
}发布于 2019-11-09 17:27:23
这里的问题是,它要求您将inp->value()存储到一个常量char*中,但常量不能被修改……我完全糊涂了。
https://stackoverflow.com/questions/40498090
复制相似问题