gpt4 book ai didi

c - 删除 GTK+ 容器子项,重新填充它,然后刷新

转载 作者:太空狗 更新时间:2023-10-29 17:07:51 24 4
gpt4 key购买 nike

我遇到了 GTK+ C 应用程序的问题。我有一个容器,在启动应用程序时,它包含一个按钮。在运行期间,用户交互必须使此小部件包含更多。
我需要编写一个函数来删除所有“旧”内部按钮,然后从列表中添加所有按钮,最后刷新 View 。这就是我正在写的内容,但缺少某些部分(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...
}

希望有人能帮忙,谢谢!

最佳答案

移除所有 child :

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);

请注意,上面只是直接删除了每个子部件,而不是要求容器将其删除(使用gtk_container_remove()),这是recommended by the documentation并符合您的意图,所以我认为这很好。

“刷新 View ”没有意义,只要您实际将新建的小部件添加并显示到容器中即可。 GTK+ 是基于事件的,将子项添加到容器会使容器意识到它需要自动刷新其视觉外观。

关于c - 删除 GTK+ 容器子项,重新填充它,然后刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9192223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com