funktion für Onclick event in einer klasse definieren



  • Guten abend allerseits

    ich habe eine klasse für Buttons definiert, die mit opengl gezeichnet werden.

    in meinem menü sind im moment vier dieser buttons gezeichnet. wenn ich in das fenster klicke wird mit hilfe von picking festgelegt welcher button gedrückt wurde. das funktioniert auch (ich erhalte den korrekten namen des buttons), aber jetzt möchte ich auch eine aktion durchführen lassen. wie kann ich für jeden button eine andere funktion festlegen, die ausgeführt wird wenn ich darauf klicke?

    habe ich mich einigermassen verständlich ausgedrückt? 😃
    danke schonmal für eure hilfe und ideen



  • Ganz spontan würde ich eine Liste mit Funktionszeigern machen. Vielleicht eine std::map, die kannst du dann direkt mit den Namen deiner Buttons füttern. Und der Zeiger auf die OnClick-Methode wird einfach für den entsprechenden Button eingetragen.

    Wenn du jetzt einen Klick hast, brauchst nur die map mit dem Buttonnamen durchforsten, bekommst einen Funktionszeiger und führst den aus...



  • mad_martin schrieb:

    Ganz spontan würde ich eine Liste mit Funktionszeigern machen. Vielleicht eine std::map, die kannst du dann direkt mit den Namen deiner Buttons füttern. Und der Zeiger auf die OnClick-Methode wird einfach für den entsprechenden Button eingetragen.

    Wenn du jetzt einen Klick hast, brauchst nur die map mit dem Buttonnamen durchforsten, bekommst einen Funktionszeiger und führst den aus...

    Man könnte den Zeiger auch gleich in der Buttonklasse speichern. Und dann dann diesen Aufrufen. Erspart einem das doppelte Suchen des Objektes, weil das ja bereits beim Picking gefunden wurde.



  • Natürlich.
    Allerdings schrieb er, dass er den Namen bekommt. Da muss er das Objekt ja erst suchen. Sollte man aber wirklich direkt in der Buttonklasse machen.



  • mad_martin schrieb:

    Natürlich.
    Allerdings schrieb er, dass er den Namen bekommt. Da muss er das Objekt ja erst suchen. Sollte man aber wirklich direkt in der Buttonklasse machen.

    Joa.

    Aber wenn ich mir diesen Satz anschaue:

    ..-.. schrieb:

    ich habe eine klasse für Buttons definiert, die mit opengl gezeichnet werden.

    Dann sollte er besser einen Zeiger zurückgeben, als einfach einen string und dann den Zeiger in einer map suchen. 😉



  • als "namen" werden von opengl nur integer akzeptiert (in meinem menü heissen die buttons einfach 0, 1, 2 und 3). sorry hätte ich erwähnen müssen.
    könnt ihr mir ein beispiel schreiben wie ich das realisieren kann?



  • ..-.. schrieb:

    als "namen" werden von opengl nur integer akzeptiert (in meinem menü heissen die buttons einfach 0, 1, 2 und 3). sorry hätte ich erwähnen müssen.
    könnt ihr mir ein beispiel schreiben wie ich das realisieren kann?

    Also du hast die Klasse schon selber geschrieben, oder?

    Dann kannst du nämlich ganz einfach einen Zeiger auf eine Funktion halten und dann, wenn gedrückt wird diese Funktion aufrufen. Fertig.
    Thema: Funktionszeiger
    Ich habe das auch so gelöst, allerdings mit Memberfunktionszeiger. 😉



  • funktioniert. vielen dank 🙂


Anmelden zum Antworten