TreeView/TreeStore Text und Zellen formatieren



  • Hallo,
    ich mache gerade erste Schritte mit der Gtk::TreeView und bin jetzt soweit, dass ich einige Daten eingetragen habe.
    Jetzt würde ich diese Daten (ustrings) gerne formatieren.
    Bzw. es würde auch ausreichen, die Hintergrundfarbe der Zelle zu ändern.
    Ich habe leider noch kein passendes Tutorial/Beispiel hierfür gefunden.
    Kann mir da mal jemand bitte einen Tipp geben???

    Danke



  • Hi,

    sambalmueslie schrieb:

    Bzw. es würde auch ausreichen, die Hintergrundfarbe der Zelle zu ändern.

    Alle Zellen? Irgendeine Zelle? Die aktuell selektierte Zeile? Jede Zeile?

    Cheers

    GPC



  • GPC schrieb:

    Hi,

    sambalmueslie schrieb:

    Bzw. es würde auch ausreichen, die Hintergrundfarbe der Zelle zu ändern.

    Alle Zellen? Irgendeine Zelle? Die aktuell selektierte Zeile? Jede Zeile?

    Cheers

    GPC

    Eigentlich reicht eine einzelne Zeile. Da ich die Zeilen je nach Status (Erfolg/Fehler/Sonstiges) einfärben möchte.
    Aber das sollte ja eigentlich keine Rolle spielen, da ich mit einem Iterator ja auf die Zellen zugreifen kann oder??
    Gruß Oli



  • Okay, ich hab' mal ein kleines Beispiel gestrickt. Grundsätzlich macht man solche Sachen per Gtk::CellRenderer bzw. seiner Subklassen. Hier habe ich nur mal eine Spalte farbig gemacht... d.h. wenn du die andere Spalte auch farbig haben willst, musst du einfach die "Id"-Spalte genauso hinzufügen wie die "Colour"-Spalte. Der Cell-Renderer muss im Übrigen nur ein mal konfiguriert werden. Idealerweise versteckst du die "colour"-Spalte später sowieso 🙂
    Viel Spaß beim Rumprobieren 😃

    #include <gtkmm.h> 
    
    class Application : public Gtk::Window { 
        class Columns : public Gtk::TreeModel::ColumnRecord { 
    	public: 
            Columns() { 
                add(col_id); 
    			add(col_colour);
    		} 
    
            ~Columns() {} 
    
            Gtk::TreeModelColumn<unsigned> col_id; 
            Gtk::TreeModelColumn<Glib::ustring> col_colour; 
    	}; 
    
        Gtk::VBox topBox; 
    
        Gtk::ScrolledWindow scrollWindow; 
        Gtk::TreeView treeView; 
        Glib::RefPtr<Gtk::ListStore> listStore; 
    
        Columns cols; 
    
    	public: 
            Application() { 
            set_title("ListStore Example"); 
            set_default_size(200,200); 
    
            treeView.set_model(listStore = Gtk::ListStore::create(cols)); 
    
            Gtk::TreeModel::Row row = *(listStore->append()); 
            row[cols.col_id] = 0; 
            row[cols.col_colour] = "red"; 
    
            row = *(listStore->append()); 
            row[cols.col_id] = 1; 
            row[cols.col_colour] = "blue"; 
    
            row = *(listStore->append()); 
            row[cols.col_id] = 2; 
            row[cols.col_colour] = "green"; 
    
    		row = *(listStore->append()); 
    		row[cols.col_id] = 3; 
    		row[cols.col_colour] = "white"; 
    
    		treeView.append_column("Id", cols.col_id); 
    
    		Gtk::CellRendererText *cell = new Gtk::CellRendererText; 
    
    		int column_count = treeView.append_column("Colour", *cell); 
    		Gtk::TreeViewColumn *column = treeView.get_column(column_count-1); 
    
    		if (column) { 
    #ifndef GLIBMM_PROPERTIES_ENABLED 
    			column->add_attribute(cell->property_text(), cols.col_colour); 
    			column->add_attribute(cell->property_background(), cols.col_colour);
    #else 
    			column->add_attribute(*cell, "text", cols.col_colour); 
    			column->add_attribute(*cell, "background", cols.col_colour);
    #endif 
    		} 
    
            scrollWindow.add(treeView); 
            scrollWindow.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); 
    
            topBox.pack_start(scrollWindow); 
            add(topBox); 
    
            show_all_children(); 
    } 
        ~Application() { } 
    }; 
    
    int main(int argc, char **argv) { 
        Gtk::Main m(argc, argv); 
    
        Application app; 
        m.run(app); 
    
        return EXIT_SUCCESS; 
    }
    

    Cheers

    GPC



  • Super danke, damit konnt ich echt was anfangen.
    Das heißt ich muss für die Zellen einen entsprechenden Renderer verwenden um da irgendwelche Attribute zu setzen.

    Jetzt hab ich noch eine Frage:
    Ich hab das TreeStore-Model und eine entsprechende Hirarchie.
    Weiter werden die Children zur Programmlaufzeit hinzugefügt und werden dann immer "zugeklappt" angezeigt. Das heißt ich muss immer auf das lustige "Dreieck" klicken um die Children anzuzeigen.
    Kann ich das irgendwie auch setzen. (Bestimmt, nur weiß ich nicht wie 🙂 )
    Gruß Oli



  • sambalmueslie schrieb:

    Das heißt ich muss für die Zellen einen entsprechenden Renderer verwenden um da irgendwelche Attribute zu setzen.

    Jo, das text-Attribut sagt, welcher Text dargestellt werden soll (hier in dem Fall der Name der Hintergrundfarbe) und background eben, welche Hintergrundfarbe gesetzt wird.

    Weiter werden die Children zur Programmlaufzeit hinzugefügt und werden dann immer "zugeklappt" angezeigt. Das heißt ich muss immer auf das lustige "Dreieck" klicken um die Children anzuzeigen.
    Kann ich das irgendwie auch setzen. (Bestimmt, nur weiß ich nicht wie 🙂 )

    Jo, aber per Gtk::TreeView: http://gtkmm.org/docs/gtkmm-2.4/docs/reference/html/classGtk_1_1TreeView.html#2e606e1a46b925cb2326878fde8cc7fb

    Cheers

    GPC



  • Danke. Hat einwandfrei geklappt :D..
    Ich hab nach show_all_children gesucht. Das war aber nicht das richtige 🙂


Log in to reply