Die GtkTreeView-Komponente ist eine erweiterte Komponente, mit der Sie schöne normale Listen oder baumartige Listen erstellen können. Diese Konstruktion kann eine oder mehrere Zeilen enthalten. Wie ist seine Struktur? Es übernimmt das bekannte MVC-Design-Framework (Model View Controller). Das heißt, die Daten und die Anzeigemethode sind getrennt. Es gibt also tatsächlich mehrere andere unabhängige Objektstrukturen (Objekte) in der GtktreeView-Komponente. GtkCellRenderer bestimmt, wie die Daten in GtkTreeViewColumn angezeigt werden. Die Funktion von GtkListStore und GtkTreeStore besteht darin, die Rolle des Modells widerzuspiegeln. Das heißt, sie werden zum Verarbeiten und Analysieren der im GtkTreeView anzuzeigenden Daten verwendet. GtkTreeIter ist eine Datenstruktur, die zum Bearbeiten der Daten in der Zeile der GtkTreeView-Komponente verwendet wird. GtkTreeSelection wird zum Verarbeiten von Optionen verwendet. Die Wirkung ist wie folgt Der Code lautet wie folgt #include <gtk/gtk.h> Aufzählung { LIST_ITEM = 0, N_SPALTEN }; void init_list(GtkWidget *list) { GtkCellRenderer *Renderer; GtkTreeViewColumn *Spalte; GtkListStore *Speichern; Renderer = gtk_cell_renderer_text_new (); Spalte = gtk_tree_view_column_new_with_attributes("Listenelemente", Renderer, "Text", LIST_ITEM, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(Liste), Spalte); speichern = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING); gtk_tree_view_set_model(GTK_TREE_VIEW(Liste), GTK_TREE_MODEL(Speichern)); g_object_unref(Speicher); } void zur Liste hinzufügen(GtkWidget *Liste, const gchar *str) { GtkListStore *Speichern; GtkTreeIter iter; speichern = GTK_LIST_STORE(gtk_tree_view_get_model (GTK_TREE_VIEW(Liste))); gtk_list_store_append(speichern, &iter); gtk_list_store_set(store, &iter, LIST_ITEM, str, -1); } void on_changed(GtkWidget *widget, gpointer-Bezeichnung) { GtkTreeIter iter; GtkTreeModel *Modell; gchar *Wert; wenn (gtk_tree_selection_get_selected( GTK_TREE_SELECTION(Widget), &Modell, &Iter)) { gtk_tree_model_get(Modell, &iter, LIST_ITEM, &Wert, -1); gtk_label_set_text(GTK_LABEL(Bezeichnung), Wert); g_free(Wert); } } int main(int argc, char *argv[]) { GtkWidget *Fenster; GtkWidget *Liste; GtkWidget *vbox; GtkWidget *Bezeichnung; GtkTreeSelection *Auswahl; gtk_init(&argc, &argv); Fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL); Liste = gtk_tree_view_new(); gtk_window_set_title(GTK_WINDOW(window), "Listenansicht"); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); //Auf Mitte setzen. gtk_container_set_border_width(GTK_CONTAINER(Fenster), 10); gtk_widget_set_size_request(Fenster, 270, 250); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(Liste), FALSE); vbox = gtk_vbox_new(FALSCH, 0); gtk_box_pack_start(GTK_BOX(vbox), Liste, WAHR, WAHR, 5); Bezeichnung = gtk_label_new(""); gtk_box_pack_start(GTK_BOX(vbox), Bezeichnung, FALSCH, FALSCH, 5); gtk_container_add(GTK_CONTAINER(Fenster), vbox); init_list(Liste); zur Liste hinzufügen(Liste, "Aliens"); zur Liste hinzufügen(Liste, "Leon"); add_to_list(Liste, "Das Urteil"); add_to_list(Liste, "Nordwand"); add_to_list(list, "Der Untergang"); Auswahl = gtk_tree_view_get_selection(GTK_TREE_VIEW(Liste)); g_signal_connect(Auswahl, "geändert", G_CALLBACK(bei_geändert), Bezeichnung); g_signal_connect(G_OBJECT (Fenster), "zerstören", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(Fenster); gtk_main(); gebe 0 zurück; } Im obigen Beispielcode zeigen wir Ihnen 5 Elemente und ordnen sie in der Komponente GtkTreeView an. Wir platzieren zunächst ein GtkVBox-Widget im Fenster. Diese GtkVBox-Komponente enthält zwei Komponenten: GtkTreeView und GtkLabel.
Rufen Sie die Funktion list() auf, um die Komponentenliste zu initialisieren. Renderer = gtk_cell_renderer_text_new(); Spalte = gtk_tree_view_column_new_with_attributes("Listenelemente", Renderer, "Text", LIST_ITEM, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(Liste), Spalte); In der Initialisierungsfunktion generieren wir eine GtkTreeView mit nur einer Spalte. speichern = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING); gtk_tree_view_set_model(GTK_TREE_VIEW(Liste), GTK_TREE_MODEL(Speichern)); Als nächstes haben wir ein GtkListStore-Widget (ein Modell) erstellt und es an das Listen-Widget gebunden. g_object_unref(Speicher); Das Modell wird automatisch zerstört, um Speicherplatz freizugeben. zur Liste hinzufügen(Liste, "Aliens"); Oben wird die Funktion add_to_list() aufgerufen, um der Liste eine Option hinzuzufügen.
In der Funktion add_to_list() verwenden wir die Systemfunktion gtk_tree_view_get_model(), um das Modell zu erhalten. Wir generieren eine neue Zeile und übergeben die Daten in der Zeile zur Verarbeitung an das Modell. Dies wird mit Hilfe von GtkTreeIter erreicht. Auswahl = gtk_tree_view_get_selection(GTK_TREE_VIEW(Liste)); Eine GtkTreeSelection muss eigentlich nicht explizit erstellt werden. Hier verwenden wir die GtkTreeView-Komponente, um es automatisch zu generieren. Wie Sie sehen, hilft hierbei die Systemfunktion gtk_tree_view_get_selection(). Okay, übe noch ein bisschen. Hinzufügen einer Spalte Der Code lautet wie folgt #include <gtk/gtk.h> Aufzählung { LIST_ITEM = 0, LIST_AGE, N_SPALTEN }; void init_list(GtkWidget *list) { //Um Daten in der Ansicht anzuzeigen, müssen Sie GtkCellRenderer und GtkTreeViewColumn erstellen GtkCellRenderer *Renderer; GtkTreeViewColumn *Spalte; GtkListStore *Speichern; //Erstellen Sie einen GtkCellRenderer Renderer = gtk_cell_renderer_text_new (); //Erstellen Sie eine Spalte mit einem Titel und fügen Sie einen Renderer ein, damit der Inhalt angezeigt werden kann. Spalte = gtk_tree_view_column_new_with_attributes("List Items", renderer, "text", LIST_ITEM, NULL); //Spalten zu gtk_tree_view hinzufügen gtk_tree_view_append_column(GTK_TREE_VIEW(Liste), Spalte); //Erstellen Sie einen GtkCellRenderer Renderer = gtk_cell_renderer_text_new (); //g_object_set (G_OBJECT (Renderer), „xalign“, 1.0, NULL); //rechtsbündig //Erstelle eine Spalte mit einem Titel und füge den Renderer darin ein, damit er den Inhalt anzeigen kann. Spalte = gtk_tree_view_column_new_with_attributes(„Listenalter“, Renderer, „Text“, LIST_AGE, NULL); //Spalten zu gtk_tree_view hinzufügen gtk_tree_view_append_column(GTK_TREE_VIEW(Liste), Spalte); speichern = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_INT); //Ansicht und Modell zuordnen gtk_tree_view_set_model(GTK_TREE_VIEW(Liste), GTK_TREE_MODEL(Speicher)); //Senden Sie das Datenmodell zur Verwaltung an die Ansicht. Wenn die Ansicht zerstört wird, werden die Daten zusammen damit zerstört g_object_unref(store); } void add_to_list(GtkWidget *Liste, const gchar *str ,gint Alter) { GtkListStore *Speichern; GtkTreeIter iter; speichern = GTK_LIST_STORE(gtk_tree_view_get_model (GTK_TREE_VIEW(Liste))); gtk_list_store_append(speichern, &iter); gtk_list_store_set(store, &iter, LIST_ITEM, str, LIST_AGE, Alter, -1); } void on_changed(GtkWidget *widget, gpointer-Bezeichnung) { GtkTreeIter iter; GtkTreeModel *Modell; gchar *Wert; //Holen Sie sich den GtkTreeIter einer in der Baumansicht ausgewählten Zeile wenn (gtk_tree_selection_get_selected( GTK_TREE_SELECTION(Widget), &Modell, &Iter)) { gtk_tree_model_get(Modell, &iter, LIST_ITEM, &Wert, -1); gtk_label_set_text(GTK_LABEL(Bezeichnung), Wert); g_free(Wert); } } int main(int argc, char *argv[]) { GtkWidget *Fenster; GtkWidget *Liste; GtkWidget *vbox; GtkWidget *Bezeichnung; GtkTreeSelection *Auswahl; gtk_init(&argc, &argv); Fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL); Liste = gtk_tree_view_new(); gtk_window_set_title(GTK_WINDOW(window), "Listenansicht"); gtk_window_set_position(GTK_WINDOW(Fenster), GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(Fenster), 10); gtk_widget_set_size_request(Fenster, 270, 250); //Legen Sie den Sichtbarkeitsstatus des Titels fest. gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(Liste), TRUE ); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); //gtk_vbox_new (FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), Liste, WAHR, WAHR, 5); Bezeichnung = gtk_label_new(""); gtk_box_pack_start(GTK_BOX(vbox), Bezeichnung, FALSCH, FALSCH, 5); gtk_container_add(GTK_CONTAINER(Fenster), vbox); init_list(Liste); zur Liste hinzufügen(Liste, "Aliens", 10); zur Liste hinzufügen(Liste, "Leon", 2); add_to_list(Liste, "Das Urteil", 30); add_to_list(Liste, "Nordwand", 4); add_to_list(list, "Der Untergang",50); Auswahl = gtk_tree_view_get_selection(GTK_TREE_VIEW(Liste)); g_signal_connect(Auswahl, "geändert", G_CALLBACK(bei_geändert), Bezeichnung); g_signal_connect(G_OBJECT (Fenster), "zerstören", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(Fenster); gtk_main(); gebe 0 zurück; } Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Warum wird nicht empfohlen, in Vue eine leere Zeichenfolge als Klassennamen zu verwenden?
>>: Unterscheiden Sie zwischen Nullwert und leerem Zeichen ('') in MySQL
Heute fiel mir plötzlich ein, die Produktionsprinz...
1. Befehlseinführung Mit „time“ werden die für di...
Allgemeine Lade-/Schreibmethoden Optionen manuell...
Inhaltsverzeichnis 1. Einführung in Hochverfügbar...
Wir wissen, dass MySQL ein persistenter Speicher ...
1. Herunterladen https://dev.mysql.com/downloads/...
Was ist Lastenausgleich? Wenn ein Domänenname auf...
1. <div></div> und <span></s...
Vorwort: Verwenden Sie das Element-Framework in v...
Inhaltsverzeichnis <Vorlage> <ul Klasse=...
Es gibt ein solches Szenario: ein kreisförmiger C...
Normalerweise verwenden wir die folgende SQL-Anwe...
Zuerst müssen Sie Vue-cli installieren: npm insta...
Weil ich ein Datenbank-Tutorial habe, das auf SQL...
Inhaltsverzeichnis Die dynamischen Partikeleffekt...