gtkmm: ToggleButton set_active ohne clicked



  • Hallo,

    ich möchte gerne einen ToggleButton mit set_active(true) setzen, ohne jedoch ein Signal (clicked) zu feuern, gibt es dafür eine Möglichkeit?

    Wenn ja, könnt ihr mir ein Beispiel zeigen.

    Vielen Dank,

    dkr



  • Ja wie? Du willst einen Gtk::ToggleButton, der soll in den Zustand true gebracht werden, aber ohne ein signal_clicked event draufzulegen? Wieso nicht einfach:

    Gtk::ToggleButton tb("Click me", false);
    
    //...irgendwann später
    tb.set_active(true);
    

    MfG

    GPC



  • GPC schrieb:

    Ja wie? Du willst einen Gtk::ToggleButton, der soll in den Zustand true gebracht werden, aber ohne ein signal_clicked event draufzulegen? Wieso nicht einfach:

    Gtk::ToggleButton tb("Click me", false);
    
    //...irgendwann später
    tb.set_active(true);
    

    MfG

    GPC

    Also ich habe einen ToggleButton, der aus irgend einem Grunde gedrückt sein soll, sozusagen standardmäßig aktiviert (vielleicht werden irgendwelche Daten ausgelesen und ausgewertet), in diesem Zustand soll erst einmal nix passieren. Dann kann der Benutzer, wenn er denn möchte, diesen Zustand ändern, erst dann soll das Signal gefeuert werden, jedes Mal, wenn er jetzt diesen Zustand ändert, soll ein Signal gefeuert werden.
    Hab keine Ahnung wie ich das umsetzen soll. 😕 😕



  • Im Konstruktor des Gtk::ToggleButtons gibst du ein true mit, damit ist er von haus aus gedrückt. Dann legst du einen signal_toggled event drauf und kannst registrieren, wann sich der Zustand geändert hat.

    MfG

    GPC



  • Entschuldigung aber die gtkmm-Dokumentation ist an dieser Stelle ziemlich schlecht, oder ich bin einfach nur zu blöd. Wer weiß das schon 😃 🤡?

    Gtk::ToggleButton::ToggleButton  	(  	const Glib::ustring&   	 label,
    		bool  	mnemonic = false
    	)  	[explicit]
    
    Create a toggle button with a label.
    
    You won't be able to add a widget to this button since it already contains a Gtk::Label
    

    Gibt es eine bessere Doku? Oder ein gutes Tutorial?

    Viele Grüße



  • dkr schrieb:

    Entschuldigung aber die gtkmm-Dokumentation ist an dieser Stelle ziemlich schlecht,

    Wieso? Steht doch alles drin...

    Gtk::ToggleButton::ToggleButton  	(  	const Glib::ustring&   	 label,
    		bool  	mnemonic = false
    	)  	[explicit]
      	
    
    Create a toggle button with a label.
    
    You won't be able to add a widget to this button since it already contains a Gtk::Label
    

    Ja und? Wo ist das Problem?

    #include <iostream>
    
    #include <gtkmm.h>
    
    class Foo : public Gtk::Window {
      Gtk::ToggleButton bt;
      Gtk::VBox vbox;
    
      Foo(const Foo&);
      Foo& operator=(const Foo&);
    
      void on_button_clicked() {
        std::cout<<"ToggleButton has been clicked. Current state: "<<bt.get_state()<<std::endl;
      }
    
    public:
      Foo() : bt("Click me") {
        bt.set_active(true);
        bt.signal_toggled().connect( sigc::mem_fun(*this, &Foo::on_button_clicked) );
    
        vbox.pack_start(bt, Gtk::PACK_WIDGET_EXPAND);
        add(vbox);
        show_all_children();
      }
    };
    
    int main(int argc, char **argv) {
      Main m(argc, argv);
    
      Foo f;
      m.run(f);
    
      return 0;
    };
    

    Hab's nicht kompiliert, sondern nur kurz zusammengetippt.

    Gibt es eine bessere Doku?

    Die Doku ist gut.

    Oder ein gutes Tutorial?

    Nein.

    MfG

    GPC



  • Hallo nochmal,

    also ich habe das mal eben ausprobiert.
    Und die Angabe:

    ToggleButton t("toggle", true);
    

    hat nicht den gewünschten Effekt. Der Button wird zwar richtig dargestellt, jedoch nicht im gedrückten Zustand.

    Ich habe dann nochmal gegooglet, da ich unter mnemonic auch etwas vollständig anderes verstehe als du. Nämlich wie in Wikipedia beschrieben in der EDV einen unterstrichenen Buchstaben in Menüs, um das Menü mit dem entsprechenden Shortcut ansteuern zu können.(z. B.: Datei)

    Viele Grüße,

    dkr



  • dkr schrieb:

    also ich habe das mal eben ausprobiert.
    Und die Angabe:

    ToggleButton t("toggle", true);
    

    hat nicht den gewünschten Effekt. Der Button wird zwar richtig dargestellt, jedoch nicht im gedrückten Zustand.

    Ach richtig, sorry. Setz den ToggleButton im Konstruktor mit set_active auf den gedrückten Zustand.

    Ich habe dann nochmal gegooglet, da ich unter mnemonic auch etwas vollständig anderes verstehe als du. Nämlich wie in Wikipedia beschrieben in der EDV einen unterstrichenen Buchstaben in Menüs, um das Menü mit dem entsprechenden Shortcut ansteuern zu können.(z. B.: Datei)

    Das verstehe ich auch darunter, war aber nicht ganz bei der Sache. 🙂

    Bis dann

    GPC


Anmelden zum Antworten