LINUX.ORG.RU

GtkTreeView формат столбцов


0

1

Добрый день! Подскажите пожалуйста: есть табличка, некоторые ее столбцы имеют значения типа float. Вопрос - как обрезать мантису,скажем, до 3х знаков(может есть ф-ция форматированого вывода в TreeView(ненашел))?А то смотреть на этот огромный хвост из нулей как-то моветон.

Ответ на: комментарий от red_byte

ничего дублировать не нужно. TreeView работает по MVC-модели. Пиши свой рендерер. Это не так сложно как кажется. Там кода с десяток-полтора строк получится.

Deleted
()
Ответ на: комментарий от red_byte

как это не помогла? вот там прям отдельный раздел есть

http://en.wikibooks.org/wiki/GTK+_By_Example/Tree_View/Columns_and_Renderers#...

там даже пример приведен ровно того, что тебе нужно...

void
   age_cell_data_function (GtkTreeViewColumn *col,
                           GtkCellRenderer   *renderer,
                           GtkTreeModel      *model,
                           GtkTreeIter       *iter,
                           gpointer           user_data)
   {
     gfloat  age;
     gchar   buf[20];
 
     gtk_tree_model_get(model, iter, COLUMN_AGE_FLOAT, &age, -1);
 
     g_snprintf(buf, sizeof(buf), "%.1f", age);
 
     g_object_set(renderer, "text", buf, NULL);
   }
 
   ...
 
   liststore = gtk_list_store_new(NUM_COLS, G_TYPE_STRING, G_TYPE_FLOAT);
 
   col = gtk_tree_view_column_new();
 
   cell = gtk_cell_renderer_text_new();
 
   gtk_tree_view_column_pack_start(col, cell, TRUE);
 
   gtk_tree_view_column_set_cell_data_func(col, cell, age_cell_data_func, NULL, NULL);
Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от red_byte

Должно получится, по похожей статье, может даже по этой, делал renderer для столбца с картинкой. Если в gtk3 делаешь, то там мальца всё сломали.

ilovewindows ★★★★★
()
Последнее исправление: ilovewindows (всего исправлений: 1)
Ответ на: комментарий от ilovewindows

Ну вот, пробовал поразному, например вот так:

void float_cell_data_func(GtkTreeViewColumn *col, GtkCellRenderer *renderer,
        GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
{
    gfloat x;
    gchar buf[20];
    int n = atoi(select_path);
    gtk_tree_model_get(model, iter, COL_OFFSET_X, &x, -1);

    g_snprintf(buf, sizeof(buf), "%.1f", x);

    g_object_set(renderer, "text", buf, NULL );
}

static GtkTreeModel *
create_and_fill_model(void)
{
    GtkListStore *store;
    GtkTreeIter iter;
    GtkTreeViewColumn *col;
    GtkCellRenderer *cell;
    store = gtk_list_store_new(NUM_COLS, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT,
            G_TYPE_UINT, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_FLOAT, G_TYPE_FLOAT,
            G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_FLOAT,
            G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_FLOAT,
            G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_STRING, G_TYPE_FLOAT,
            G_TYPE_UINT, G_TYPE_FLOAT, G_TYPE_UINT, G_TYPE_UINT );
    col = gtk_tree_view_column_new();
    cell = gtk_cell_renderer_text_new();
    gtk_tree_view_column_pack_start(col, cell, TRUE);
    gtk_tree_view_column_set_cell_data_func(col,cell,float_cell_data_func , NULL, NULL);

     gchar buf[20];

    for (int i = 0; i < len_json_file; i++) {

        gtk_list_store_append(store, &iter);
        gtk_list_store_set(store, &iter, COL_NN, tool_nodes_arr[i].n, COL_N_MAG,
                tool_nodes_arr[i].n_mag, COL_N_TOOL, tool_nodes_arr[i].n_tool,
                COL_TIP, tool_nodes_arr[i].tip, COL_NAME,
                tool_nodes_arr[i].name, COL_P, tool_nodes_arr[i].n_p,
                COL_OFFSET_X, tool_nodes_arr[i].offset_x, COL_OFFSET_Y,
                tool_nodes_arr[i].offset_y, COL_OFFSET_Z,
                tool_nodes_arr[i].offset_z, COL_OFFSET_XX,
                tool_nodes_arr[i].offset_xx, COL_OFFSET_YY,
                tool_nodes_arr[i].offset_yy, COL_OFFSET_ZZ,
                tool_nodes_arr[i].offset_zz, COL_OFFSET_4,
                tool_nodes_arr[i].offset_4, COL_OFFSET_5,
                tool_nodes_arr[i].offset_5, COL_OFFSET_6,
                tool_nodes_arr[i].offset_6, COL_OFFSET_7,
                tool_nodes_arr[i].offset_7, COL_OFFSET_8,
                tool_nodes_arr[i].offset_8, COL_RI, tool_nodes_arr[i].ri,
                COL_KI, tool_nodes_arr[i].ki, COL_HI, tool_nodes_arr[i].hi,
                COL_AI, tool_nodes_arr[i].ai, COL_WI, tool_nodes_arr[i].wi,
                COL_MM, tool_nodes_arr[i].mm, COL_M8, tool_nodes_arr[i].m_8,
                -1);
        //g_signal_connect(store, "row-inserted", (GCallback) focus_row, NULL);

    }
    return GTK_TREE_MODEL (store) ;

}
Ничего не вышло:(

red_byte
() автор топика
Ответ на: комментарий от red_byte

Ураааа! все вышло! Вот как надо: [code = c] void render_float(GtkTreeViewColumn *column, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data) { // printf(«1111\n»); gfloat f; gchar buf[20];

int col = GPOINTER_TO_INT(user_data); gtk_tree_model_get(model, iter, col, &f, -1); g_snprintf(buf, sizeof(buf), «%.3f», f); g_object_set(renderer, «text», buf, NULL ); // printf(«2222\n»); }

.......

/* --- Column #7 --- */ renderer = gtk_cell_renderer_text_new(); g_object_set_data(renderer, «col_num», GINT_TO_POINTER (COL_OFFSET_X) );//COL_OFFSET_X- имя моего столбца,например) gtk_tree_view_insert_column_with_data_func(GTK_TREE_VIEW (view), -1, «смещ по X », renderer, render_float, COL_OFFSET_X, NULL ); gtk_cell_renderer_set_fixed_size(renderer, 60, 10); .........................

red_byte
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.