Добавление Gtk :: ListStore в Gtk :: TreeView и добавление строк в ListStore (gtkmm) - PullRequest
1 голос
/ 07 апреля 2020

Я хочу иметь возможность добавить Gtk :: ListStore в Gtk :: TreeView, древовидная структура была реализована с помощью glade, но я создал ListStore в C ++ и добавил в него столбцы и строки.

Когда я запускаю код, он показывает окно и tree_view, который был загружен из файла glade, но он пуст.

mainWindow.h:

#pragma once
#include <gtkmm.h>


class MainWindow {
    protected:
        Gtk::Window *main_window;

        Gtk::TreeView *tree_view;
        Glib::RefPtr<Gtk::ListStore> list_store;

    public:
        void init();

        class ModelColumns : public Gtk::TreeModel::ColumnRecord
        {
        public:
            ModelColumns() { add(name); add(age); }

            Gtk::TreeModelColumn<Glib::ustring> name;
            Gtk::TreeModelColumn<Glib::ustring> age;
        };
};

mainWindow. cpp:

#include "mainWindow.h"

void MainWindow::init() {

    auto app = Gtk::Application::create("org.gtkmm.example");
    auto builder = Gtk::Builder::create_from_file("test.glade");

    builder->get_widget("main_window", main_window);
    builder->get_widget("tree_view", tree_view);

    ModelColumns columns;

    list_store = Gtk::ListStore::create(columns);
    tree_view->set_model(list_store);

    Gtk::TreeModel::Row row = *(list_store->append());
    row[columns.name] = "John";
    row[columns.age] = "30";

    row = *(list_store->append());
    row[columns.name] = "Lisa";
    row[columns.age] = "27";

    app->run(*main_window);
}

main. cpp:

#include "mainWindow.h"


int main() {
    MainWindow m;
    m.init();
}

1 Ответ

0 голосов
/ 10 апреля 2020
tree_view->set_model(list_store);

говорит tree_view использовать list_store в качестве TreeModel, но не говорит, какой столбец из list_store визуализировать. На самом деле поведение по умолчанию состоит в том, что ни один столбец не будет отображаться.

Чтобы отобразить оба столбца, вам нужно попросить tree_view добавить их.

// "Name" is column title, columns.name is data in the list_store      
tree_view->append_column("Name", columns.name);                              
tree_view->append_column("Age", columns.age);    

У Gtkmm есть официальное руководство книга. Это раздел на дереве. https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview.html.en

...