Ubuntu GTK C Listview更新动态
我有一些文本输入框和一个列表视图的空地。我想根据textentry中输入的值更改listview的值。我如何才能做到这一点?我没有找到任何关于这方面的好教程Ubuntu GTK C Listview更新动态,ubuntu,gcc,gtk,gtk3,Ubuntu,Gcc,Gtk,Gtk3,我有一些文本输入框和一个列表视图的空地。我想根据textentry中输入的值更改listview的值。我如何才能做到这一点?我没有找到任何关于这方面的好教程 <?xml version="1.0" encoding="UTF-8"?> <interface> <!-- interface-requires gtk+ 3.0 --> <object class="GtkAdjustment" id="adjustment1"> <
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">100</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name Xaxis -->
<column type="gint"/>
</columns>
<data>
<row>
<col id="0">0</col>
</row>
</data>
</object>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hadjustment">adjustment1</property>
<property name="vadjustment">adjustment1</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="treeview1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="model">liststore1</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
<property name="title" translatable="yes">Xaxis</property>
<child>
<object class="GtkCellRendererSpin" id="cellrendererspin1">
<property name="editable">True</property>
<property name="adjustment">adjustment1</property>
</object>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Value</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
100
1.
10
0
假的
真的
假的
垂直的
真的
假的
调整1
调整1
在里面
真的
假的
列表库1
Xaxis
真的
调整1
0
真的
真的
0
真的
假的
真的
假的
价值
0
0
1.
1.
真的
真的
•
1.
0
1.
1.
假的
真的
1.
这是glade文件。用于加载glade fle的c文件
#include <gtk/gtk.h>
void on_window_destroy (GtkWidget *object, gpointer user_data) {
gtk_main_quit();
}
int main (int argc, char *argv[]) {
GtkBuilder *builder;
GtkWidget *window;
gtk_init (&argc, &argv);
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "test.glade", NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
g_signal_connect (window, "destroy", G_CALLBACK (on_window_destroy), NULL);
gtk_widget_show (window);
gtk_main ();
return 0;
}
#包括
窗口上无效\u销毁(GtkWidget*对象,gpointer用户\u数据){
gtk_main_quit();
}
int main(int argc,char*argv[]){
GtkBuilder*builder;
GtkWidget*窗口;
gtk_init(&argc,&argv);
builder=gtk_builder_new();
gtk_builder_从_文件添加_(builder,“test.glade”,NULL);
窗口=GTK_小部件(GTK_生成器_获取对象(生成器,“窗口1”);
gtk_窗口设置默认大小(gtk_窗口(窗口),200200);
g_信号_连接(窗口,“销毁”,g_回调(在窗口_销毁),空);
gtk_widget_show(窗口);
gtk_main();
返回0;
}
如果我们能看到您在这里发布之前尝试过的东西,那会有所帮助。。。现在我们无法判断您的问题是glade、gobject还是GTK小部件
无论如何,您希望使用
gtk\u builder\u get\u object()
查找小部件,然后连接到条目的信号或条目属性的notify
信号(取决于您希望在按enter键时还是在用户键入时发生)。然后在信号处理程序中,您应该以您想要的任何方式修改treeview。我希望这会有所帮助。这是您刚刚发布的代码,只是做了一些调整。这里定义了一个回调函数,它将在调用时被调用。回调在\u entry\u激活时,因为您可以看到条目的值被解析为整数,并根据其值附加或替换第一个值。重要的部分是:
- store对象在main函数中传递给回调函数,以便以后可以对其进行更改
- 使用GtkTreeIter对象操纵存储中的值()
#包括
无效输入激活(GtkEntry*输入,gpointer用户数据)
{
gint64 i64;
金特一世;
GtkListStore*存储=(GtkListStore*)用户数据;
GtkTreeIter iter;
i64=g_ascii_strtoll(gtk_entry_get_text(entry)),NULL,10;
i=i64;
如果(i>0)
{
gtk_tree_model_get_iter_first(gtk_tree_model(store)和iter);
}
其他的
{
gtk列表、存储、附加(存储和iter);
}
gtk_列表_存储_集(存储和iter,
0,我,,
-1);
gtk_条目_集合_文本(条目“”);
}
窗口上无效\u销毁(GtkWidget*对象,gpointer用户\u数据){
gtk_main_quit();
}
int main(int argc,char*argv[]){
GtkBuilder*builder;
GtkWidget*窗口;
GtkWidget*条目;
GtkListStore*liststore1;
gtk_init(&argc,&argv);
builder=gtk_builder_new();
gtk_builder_从_文件添加_(builder,“test.glade”,NULL);
窗口=GTK_小部件(GTK_生成器_获取对象(生成器,“窗口1”);
gtk_窗口设置默认大小(gtk_窗口(窗口),200200);
g_信号_连接(窗口,“销毁”,g_回调(在窗口_销毁),空);
entry=GTK_小部件(GTK_builder_get_对象(builder,“entry1”);
liststore1=GTK_列表_存储(GTK_生成器_获取_对象(生成器,“liststore1”));
g_信号连接(输入,“激活”,g_回调(输入时激活),liststore1);
gtk_widget_show(窗口);
gtk_main();
返回0;
}
当用户激活条目时,您需要澄清一下您想要什么,更改树状视图中的值,或向其中添加新值?如果我有多个条目,我指的是多个条目框和类似的显示小部件
#include <gtk/gtk.h>
void on_entry_activated (GtkEntry *entry, gpointer user_data)
{
gint64 i64;
gint i;
GtkListStore *store = (GtkListStore*) user_data;
GtkTreeIter iter;
i64 = g_ascii_strtoll (gtk_entry_get_text (entry), NULL, 10);
i = i64;
if (i > 0)
{
gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter);
}
else
{
gtk_list_store_append (store, &iter);
}
gtk_list_store_set (store, &iter,
0, i,
-1);
gtk_entry_set_text (entry, "");
}
void on_window_destroy (GtkWidget *object, gpointer user_data) {
gtk_main_quit();
}
int main (int argc, char *argv[]) {
GtkBuilder *builder;
GtkWidget *window;
GtkWidget *entry;
GtkListStore *liststore1;
gtk_init (&argc, &argv);
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "test.glade", NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
g_signal_connect (window, "destroy", G_CALLBACK (on_window_destroy), NULL);
entry = GTK_WIDGET (gtk_builder_get_object (builder, "entry1"));
liststore1 = GTK_LIST_STORE (gtk_builder_get_object (builder, "liststore1"));
g_signal_connect (entry, "activate", G_CALLBACK (on_entry_activated), liststore1);
gtk_widget_show (window);
gtk_main ();
return 0;
}