gpt4 book ai didi

c - 如何阻止 gtk 按钮被按下两次?

转载 作者:太空宇宙 更新时间:2023-11-04 08:49:45 24 4
gpt4 key购买 nike

我有这段代码,用按钮填充表格:

box1 = gtk_builder_get_object( builder, "box1");

grid = gtk_grid_new();
gtk_grid_set_column_homogeneous(GTK_GRID(grid), TRUE);
gtk_grid_set_row_homogeneous(GTK_GRID(grid), TRUE);

gtk_box_pack_start(GTK_BOX(box1), grid, TRUE, TRUE, 0);

///////////////////////////////////////////////////////
for (i = 0, fila = 0; i < CANT_BOTONES ; i++)
{
/* Boton a ser creado */
//GtkWidget *botontab;

/* Crear boton con el texto concatenado */
//botontab = gtk_button_new();
tabbotones[i].buttontab = gtk_button_new();

//turn = *ptrturn;
g_signal_connect(G_OBJECT(tabbotones[i].buttontab), "clicked", G_CALLBACK( juega_gtk ), i);

/* Calcular columna del grid donde se ubicará el botón */
columna = i % CANT_COLUMNAS;

/* Calcular fila del grid donde se ubicará el botón */
if (i && !columna)
fila++;

tabbotones[i].fila = fila;
tabbotones[i].columna = columna;

/* Agregar botón al grid */
gtk_grid_attach(GTK_GRID(grid), GTK_WIDGET(tabbotones[i].buttontab), columna, fila, ANCHURA_BOTON, ALTURA_BOTON);
printf("%d %d -- %d %d\n", fila, columna, tabbotones[i].fila, tabbotones[i].columna );
}

我想要的是,一个按钮只能按下一次,而不是两次或更多次。我不知道如何阻止这个。我在互联网上搜索的唯一结果是: How to Implement a button-press-event on GtkTable但是我如何保存已经按下的 gtkbutton 的信息?我认为唯一的方法是将该信息保存在我的结构中,该结构上有按钮及其坐标,但如何保存?。提前致谢!

最佳答案

您可以使用 g_object_set_data 将任意值附加到任何 GObject(从而附加到任何 GtkWidget) .

如果我理解你的问题,你可以利用这个功能来完成你需要的:

/* In the loop */
g_object_set_data(button, "clicks", GINT_TO_POINTER(0));


/* In the callback */
gint clicks = GPOINTER_TO_INT(g_object_get_data(button, "clicks") + 1;
g_object_set_data(button, "clicks", GINT_TO_POINTER(clicks));

if (clicks == 1) {
/* Handle your first click */
}

GPOINTER_TO_INTGINT_TO_POINTER 只是避免使用动态内存的 C 便利。

关于c - 如何阻止 gtk 按钮被按下两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20100866/

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