The*_*ted 7 c gtk refresh widget
我遇到了GTK + C应用程序的问题.我有一个容器,在启动应用程序时,包含一个按钮.在运行期间,用户交互必须使此小部件包含更多这些小部件.
我需要编写一个删除所有"旧"内部按钮的函数,然后从列表中添加所有按钮,最后刷新视图.这就是我写的,但缺少一些部分(TODO)
void refresh_sequence_panel()
{
GSList* iterator = NULL;
GtkWidget* button;
// TODO: Here the container must be empty
// Now add all the buttons
for (iterator = steps; iterator; iterator = iterator->next) {
button = gtk_button_new_from_stock(GTK_STOCK_ADD);
gtk_widget_set_size_request(button, SEQ_BUTTON_W, SEQ_BUTTON_H);
gtk_box_pack_start(GTK_BOX(sequence_panel), button, FALSE, FALSE, 5);
handler_id = g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(seq_popup), GTK_BOX(sequence_panel));
}
// TODO: Now refresh the view, so I can see the changes...
}
Run Code Online (Sandbox Code Playgroud)
希望有人能提供帮助,谢谢!
unw*_*ind 12
删除所有孩子:
GList *children, *iter;
children = gtk_container_get_children(GTK_CONTAINER(container));
for(iter = children; iter != NULL; iter = g_list_next(iter))
gtk_widget_destroy(GTK_WIDGET(iter->data));
g_list_free(children);
Run Code Online (Sandbox Code Playgroud)
请注意,上面只是直接删除每个子窗口小部件,而不是要求容器将其删除(带gtk_container_remove()),这是文档推荐的并且符合您的意图,所以在我看来这很好.
只要您实际添加并向容器显示新构建的小部件,"刷新视图"就没有意义了.GTK +是基于事件的,并且将子项添加到容器使容器意识到需要自动刷新其视觉外观.
| 归档时间: |
|
| 查看次数: |
9975 次 |
| 最近记录: |