微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

强制GtkListStore将列右对齐

如何解决强制GtkListStore将列右对齐

什么是最好的(或以任何方式)强制GtkCellRenderer正确对齐列?我已经设法在gtk2.0的文档中找到了有关它的内容-在this链接下,提到PANGO_ALIGN_LEFT是“ alignment”属性认设置,尽管它应该可以工作,但不能使用。通过类推,应该存在一个名称为PANGO_ALIGN_RIGHT的常量,并且(如果可行)这应该可以解决我的问题。在搜索gtk源代码时,我遇到了0.0和1.0选项,它们是“对齐”的可能设置,但这也不起作用。

(gtklistview_right:25878): GLib-GObject-WARNING **: 00:17:15.109: unable to set property 'alignment' of type 'PangoAlignment' from value of type 'gchararray'

代码

gtklistview_right.c

#include <gtk/gtk.h>

enum {

  LIST_ITEM = 0,N_COLUMNS
};

void init_list(GtkWidget *list) {

  GtkCellRenderer *renderer;
  GtkTreeViewColumn *column;
  GtkListStore *store;

  renderer = gtk_cell_renderer_text_new ();
  column = gtk_tree_view_column_new_with_attributes("List Items",renderer,"text",LIST_ITEM,"alignment",PANGO_ALIGN_LEFT,NULL);
  gtk_tree_view_append_column(GTK_TREE_VIEW(list),column);

  store = gtk_list_store_new(N_COLUMNS,G_TYPE_STRING);

  gtk_tree_view_set_model(GTK_TREE_VIEW(list),GTK_TREE_MODEL(store));

  g_object_unref(store);
}

void add_to_list(GtkWidget *list,const gchar *str) {
    
  GtkListStore *store;
  GtkTreeIter iter;

  store = GTK_LIST_STORE(gtk_tree_view_get_model
      (GTK_TREE_VIEW(list)));

  gtk_list_store_append(store,&iter);
  gtk_list_store_set(store,&iter,str,-1);
}

int main(int argc,char *argv[]) {

  GtkWidget *window;
  GtkWidget *list;

  GtkWidget *vBox;
  GtkWidget *label;

  gtk_init(&argc,&argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  list = gtk_tree_view_new();

  gtk_window_set_title(GTK_WINDOW(window),"List view");
  gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
  gtk_container_set_border_width(GTK_CONTAINER(window),10);
  gtk_window_set_default_size(GTK_WINDOW(window),270,250);

  gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list),FALSE);

  vBox = gtk_vBox_new(FALSE,0);

  gtk_Box_pack_start(GTK_Box(vBox),list,TRUE,5);

  label = gtk_label_new("");
  gtk_Box_pack_start(GTK_Box(vBox),label,FALSE,5);

  gtk_container_add(GTK_CONTAINER(window),vBox);

  init_list(list);
  add_to_list(list,"Aliens");
  add_to_list(list,"Leon");
  add_to_list(list,"The Verdict");
  add_to_list(list,"north Face");
  add_to_list(list,"Der Untergang");

  g_signal_connect(G_OBJECT (window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

  gtk_widget_show_all(window);

  gtk_main();

  return 0;
}

Makefile

CC=gcc
LIBS=`pkg-config --cflags --libs gtk+-2.0`
PROGRAMS=gtklistview_right
SRC=gtklistview_right.c

all: $(PROGRAMS)

%: %.c
    $(CC) -o $@ $^ $(LIBS)

clean:
    rm $(PROGRAMS)

解决方法

您正在使用'alignment'属性,如果有多个行,它们将对齐文本行。要对齐所有文本,请使用'xalign'属性。

文档是https://developer.gnome.org/gtk3/stable/GtkCellRendererText.html#GtkCellRendererText--alignment

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。