我有一个带 12 个按钮的键盘。当按下某个按钮时,我希望所有按钮都能获得备用标签。如何做到这一点,我想我需要为此目的使用一个数组?
问问题
37 次
1 回答
1
是的,您需要将按钮存储在某种数据结构中,然后您需要将其提供给信号处理程序回调。
通常最好将所有此类状态信息包装在一个结构中,因为它可以很好地扩展:
typedef struct {
GtkWidget *keypad[12];
} GuiData;
然后只需实例化一次结构,也许是在早期main()
,然后传递它:
int main(void)
{
GuiData gui;
gui.keypad[0] = gtk_button_new_with_label("1");
/* ... */
g_signal_connect(G_OBJECT(some_widget), "clicked",
G_CALLBACK(cb_some_button_clicked), &gui);
}
请注意如何&gui
将指向 GUI 状态结构的指针传递给回调函数以处理“某些按钮”的单击。
在回调中,您可以访问键盘:
static void cb_some_button_clicked(GtkWidget *object, gpointer user)
{
GuiData *guidata = user;
gtk_button_set_label(GTK_LABEL(guidata->keypad[0], "4711");
}
我现在没有尝试这个,但上面应该大致正确。
于 2013-04-30T09:08:20.980 回答