gpt4 book ai didi

c - 使用 GTK 回调函数提交数组

转载 作者:行者123 更新时间:2023-11-30 15:49:25 25 4
gpt4 key购买 nike

我的主函数中有很多检查按钮(cbuttons[])。

单击安装按钮后,带有检查按钮的阵列将被提交。

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

GtkWidget *cbuttons[13];

[...]

for(i = 0; i < 6; i++) {
cbuttons[i] = gtk_check_button_new_with_label(cbuttons_label[i]);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cbuttons[i]), TRUE);
gtk_box_pack_start(GTK_BOX(vbox_lcbuttons), cbuttons[i], FALSE, TRUE, 0);
gtk_widget_show(cbuttons[i]);
}

[...]

g_signal_connect(button_install, "clicked", G_CALLBACK(install), &cbuttons);

}

现在我想用 data[] 分析不同按钮的状态,但它不起作用:

警告:取消引用“void *”指针。

我是 GTK 的新手。也许这是错误的做法?有人能帮助我走正确的路吗?(抱歉我的英语不好。我对这门语言不太熟悉。)

void install(GtkWidget *widget, gpointer data) {

if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(*data[0]))) {
func1();
}
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(*data[1]))) {
func2();
}
[...]

}

最佳答案

您只需在回调中将通用(gpointer,它只是 void * 的同义词)指针转换为正确类型的指针即可:

static void install(GtkWidget *widget, gpointer data)
{
GtkWidget **widgets = data;

if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets[0]))) {
func1();
}
if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets[1]))) {
func2();
}
[...]
}

关于c - 使用 GTK 回调函数提交数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16295352/

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