Gå til innhold

Bruk av string ved FLTK


Anbefalte innlegg

Hvorfor funker ikke dette?

 

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Button.H>

char stringIn[100];

void cb_string(Fl_Widget *o, void*) {
    Fl_Input *input = (Fl_Input *) o;
    input->value(stringIn);
    
    Fl_Window *window = new Fl_Window(300, 200);
    window->label(stringIn);
    
    window->end();
    window->show();
    }

int main (int argc, char *argv[])
{
   Fl_Window *mainWindow = new Fl_Window(400, 300, "Program");
   Fl_Input *input = new Fl_Input(100, 30, 100, 25, "Input");
   Fl_Button *button = new Fl_Button(100, 80, 50, 25, "Button");
   
   button->callback(cb_string);
   
   mainWindow->end();
   mainWindow->show(argc, argv);

   return Fl::run();
}

 

Det skjer ingenting med det nye vinduet jeg lager. Labelen forandrer seg ikke. Hvorfor!?

Lenke til kommentar
Videoannonse
Annonse

Først av alt:

- Du skriver C++. Bruk std::string. Det er lettere, sikrere og i enkelte tilfeller raskere.

- Lær deg til å bruke C++-kasting.

- Unngå globale variabler.

 

 

Vindustittelen blir satt, men den blir ikke satt til det du ønsker at den skal bli satt til. Hvorfor ikke? Fordi du aldri henter verdien til Fl_Input-en din inn i stringIn. stringIn er dermed tom når du kaller window->label(stringIn);.

Lenke til kommentar

Har klart og lagre teksten i en streng på denne måten

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Button.H>
#include <string>
using std::string;

void cb_button(Fl_Widget* , void *inp) {
    string szIn;
    szIn = static_cast <Fl_Input*> (inp)->value();
    }

int
main (int argc, char *argv[])
{
   Fl_Window *window = new Fl_Window(300, 200);
   Fl_Input *input = new Fl_Input(50, 10, 100, 25, "In: ");
   Fl_Button *button = new Fl_Button(100, 50, 60, 25, "Button");
   
   button->callback(cb_button, input);
   
   window->end();
   window->show(argc, argv);

   return Fl::run();
}

 

Noen andre / bedre måter og gjøre det samme på?

Endret av Kjeksen
Lenke til kommentar

Noen som kan gi meg et eksempel på og sende flere ( 3 ) inputer til en callback funksjon? får error når jeg gjør slik AddButton->callback(cb_AddContact, firstname, lastname, number);

 

firstname, lastname og number er input`ene

Endret av Kjeksen
Lenke til kommentar

Ingen som har en anelse? trenger VIRKELIG hjelp på denne :hmm:

 

Prøvde og løse det med å bruke 3 callbacker til samme knappen. Det funket, bare at når jeg skrev til text fila så skrev den over det forrige. Selv om jeg har gjort sånn at den skal skrive på enden og ikke over. Så den metoden funket ikke.

 

SITTER BOM FAST! :no:

Lenke til kommentar

Saken her er at jeg har 3 inputer. Jeg tenkte jeg skulle sende inputene til en funksjon, deretter få verdiene til forskjellige stringer. Eksempel

 


Fl_Input *FirstnameInput = new Fl_Input(10, 100, 200, 25, "Firstname");
Fl_Input *LastnameInput = new Fl_Input (10, 200, 200, 25, "Lastname");
Fl_Input *NumberInput =  new Fl_Input(10, 300, 200, 25, "Number");

Fl_Button *AddButton = new Fl_Button(100, 350, 100, 40, "Add Contact");


//Deretter sende inputene til 1 funksjon
AddButton->callback(cb_addcontact, FirsnameInput, LastnameInput, NumberInput);

 

Dette funker ikke. Det jeg mener jeg kan gjøre er og lage en klasse med Fl_Inputer. Og deretter passere objektet av denne(?)

Endret av Kjeksen
Lenke til kommentar

Tror jeg skjønner hva du mener. Husker ikke helt hvordan man henter fram inputen, men hvis du bare gjør det, så burde det være en smal sak å legge til dette i en container eller noe, som drall nevnte:

vector<string> contact;
contact.push_back(FirstnameInput->value());  //husker som sagt ikke om dette er den riktige funksjonen
contact.push_back(LastnameInput->value());  //Som ovenfor..
contact.push_back(NumberInput->value());     //------"---------

Skal se om jeg ikke finner ut hva man må gjøre for å hente inputen..

 

Edit: Det var Fl_Input::value() funksjonen het ja. *endre på*

Endret av zirener
Lenke til kommentar
Saken her er at jeg har 3 inputer. Jeg tenkte jeg skulle sende inputene til en funksjon, deretter få verdiene til forskjellige stringer. Eksempel

 

Fl_Input *FirstnameInput = new Fl_Input(10, 100, 200, 25, "Firstname");
Fl_Input *LastnameInput = (10, 200, 200, 25, "Lastname");
Fl_Input *NumberInput = (10, 300, 200, 25, "Number");

Fl_Button *AddButton = new Fl_Button(100, 350, 100, 40, "Add Contact");


//Deretter sende inputene til 1 funksjon
AddButton->callback(cb_addcontact, FirsnameInput, LastnameInput, NumberInput);

 

Dette funker ikke. Det jeg mener jeg kan gjøre er og lage en klasse med Fl_Inputer. Og deretter passere objektet av denne(?)

struct Contact {
    std::string first_name, family_name;
    int number;
};

void f()
{
    Fl_Input* first_name = new Fl_Input(10, 100, 200, 25, "First name");
    // Du hadde glemt 'new Fl_Input' på disse to:
    Fl_Input* family_name = new Fl_Input(10, 200, 200, 25, "Family name");
    Fl_Input* number = new Fl_Input(10, 300, 200, 25, "Number");

    Fl_Button* add = new Fl_Button(100, 350, 100, 40, "Add contact");

    Contact c = { first_name.value(), family_name.value(), number.value() };

   add->callback(cb_addcontact, c);
}

 

Alternativt

vector<Fl_Input*> contacts;
contacts.push_back(first_name);
contacts.push_back(family_name);
contacts.push_back(number);

 

Alternativt

Slik som zirener viser, men med Fl_Input::value(), som funksjonen heter.

Lenke til kommentar
struct Contact {
    std::string first_name, family_name;
    int number;
};

void f()
{
    Fl_Input* first_name = new Fl_Input(10, 100, 200, 25, "First name");
    // Du hadde glemt 'new Fl_Input' på disse to:
    Fl_Input* family_name = new Fl_Input(10, 200, 200, 25, "Family name");
    Fl_Input* number = new Fl_Input(10, 300, 200, 25, "Number");

    Fl_Button* add = new Fl_Button(100, 350, 100, 40, "Add contact");

    Contact c = { first_name.value(), family_name.value(), number.value() };

   add->callback(cb_addcontact, c);
}

Dette virket ikke helt som det skulle. Får beskjed om: 'value' has not been declared :hmm:

Lenke til kommentar

Akkurat den koden..

Kan paste den koden jeg har brukt så dere få se.

 

struct Contacts{
      std::string Firstname, Lastname;
      int Number;
      };

void cb_AddContact() {
    //Window
    Fl_Window *AddContactWindow = new Fl_Window(400, 300, "Add contact");
    
    //Inputs
    Fl_Input *FirstnameInput = new Fl_Input(80, 40, 200, 25, "Firstname: ");
    Fl_Input *LastnameInput = new Fl_Input(80, 80, 200, 25, "Lastname: ");
    Fl_Input *Number        = new Fl_Input(80, 120, 200, 25, "Number: ");
    
    //Buttons
    Fl_Button *AddButton = new Fl_Button(100, 200, 100, 30, "Add contact");
    Fl_Button *OkButton = new Fl_Button(220, 200, 50, 30, "Ok");
    
    
    Contacts contact = { FirstnameInput.value(), LastnameInput.value(), Number.value() };
    
    //Callbacks
    AddButton->callback(cb_AddContact, contact);
}

void cb_AddContact(Fl_Widget *x, void *inp) {
//osv
}

 

 

Feilmeldingene:

 

67 C:\Dev-Cpp\FLTKphonebook.cpp `value' has not been declared

67 C:\Dev-Cpp\FLTKphonebook.cpp request for member of non-aggregate type before '(' token

67 C:\Dev-Cpp\FLTKphonebook.cpp `Firstname' undeclared (first use this function)

 

Mye feil på linje 67 :blush:

Endret av Kjeksen
Lenke til kommentar

Her er det meste av koden.

 


#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Button.H>
#include <string>

struct Contact{
      std::string Firstname, Lastname;
      int number;
      };


//Function declarations
void cb_AddWindow(Fl_Widget *x, void*);
void cb_AddContact(Fl_Widget *x, void *inp);


int main (int argc, char *argv[])
{
  //MainWindow 
  Fl_Window *MainWindow = new Fl_Window(300, 200, "PhoneBook");

  //Buttons
  Fl_Button *AddButton = new Fl_Button(20, 70, 100, 30, "Add Contact");
  Fl_Button *GetButton = new Fl_Button(170, 70, 100, 30, "Get Contact");
  Fl_Button *QuitButton = new Fl_Button(110, 150, 70, 30, "Quit");
  
  //Callback
  AddButton->callback(cb_AddWindow);
  
  
  MainWindow->end();
  MainWindow->show(argc, argv);
  
  
   return Fl::run();
}


//Add Contact Window
void cb_AddWindow(Fl_Widget *x, void*) {
    
    //AddContact Window
    Fl_Window *AddContactWindow = new Fl_Window(400, 300, "Add Contact");
    
    //Inputs
    Fl_Input *FirstnameInput = new Fl_Input(100, 50, 250, 25, "Firstname: ");
    Fl_Input *LastnameInput = new Fl_Input(100, 100, 250, 25, "Lastname: ");
    Fl_Input *NumberInput = new Fl_Input(100, 150, 250, 25, "Number: ");
    
    //Buttons
    Fl_Button *AddButton = new Fl_Button(100, 250, 100, 30, "Add Contact");
    Fl_Button *OkButton = new Fl_Button(250, 250, 70, 30, "Ok");
    
   Contact c = { FirstnameInput.value(), LastnameInput.value(), NumberInput.value() };
    
    //Callbacks
    AddButton->callback(cb_AddContact, c);
    
    AddContactWindow->end();
    AddContactWindow->show();
    }


void cb_AddContact(Fl_Widget *x, void *inp) {
    //kode kode
    }

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...