0

12個のボタンを備えたキーパッドがあります。特定のボタンを押すと、すべてのボタンに別のラベルが付けられます。これを行うにはどうすればよいですか、目的のために配列を使用する必要があると思いますか?

4

1 に答える 1

1

はい、ボタンをある種のデータ構造に保存する必要があります。これをシグナル ハンドラー コールバックで使用できるようにする必要があります。

多くの場合、このような状態情報をすべて構造体にラップするのが最善です。

typedef struct {
  GtkWidget *keypad[12];
} GuiData;

次に、構造体を 1 回、おそらく早い段階でインスタンス化し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 に答える