2

ツールチップを GtkButton に追加したい。
なぜうまくいかないのかわからないことを除けば、これは簡単なことのように思えます。私が持っているもの:
1)

GtkButton* button = gtk_button_new_with_label("button");   
gtk_widget_set_tooltip_text(button, "tooltip text");

2)

GtkButton* button = gtk_button_new_with_label("button"); 
GtkTooltips *button_bar_tips = gtk_tooltips_new();
gtk_tooltips_set_tip(GTK_TOOLTIPS (button_bar_tips), 
                     button , "tooltip text", NULL);

両方を試してみました

gtk_widget_set_has_tooltip(button, true);

しかし、まだ運がありません。何か案は?ありがとう!

4

2 に答える 2

1

GtkWidget と GtkButton を混在させました。

GtkButton* button = gtk_button_ne*emphasized text*w_with_label("button");   
gtk_widget_set_tooltip_text(button, "tooltip text");

見る?gtk_widget_set_tooltip_text() は、最初のパラメーターが GtkButton ではなく GtkWidget であることを想定しています。コンパイラー (GCC?) は、次のように警告をスローする必要があります。

tooltips.c:23:3: warning: passing argument 1 of ‘gtk_widget_set_tooltip_text’ from incompatible pointer type [enabled by default]*emphasized text*
In file included from /usr/include/gtk-3.0/gtk/gtkapplication.h:27:0,
                 from /usr/include/gtk-3.0/gtk/gtkwindow.h:33,
                 from /usr/include/gtk-3.0/gtk/gtkdialog.h:33,
                 from /usr/include/gtk-3.0/gtk/gtkaboutdialog.h:30,
                 from /usr/include/gtk-3.0/gtk/gtk.h:31,
                 from tooltips.c:1:
/usr/include/gtk-3.0/gtk/gtkwidget.h:858:12: note: expected ‘struct GtkWidget *’ but argument is of type ‘struct GtkButton *’

以下は私のコード例です:

#include <gtk/gtk.h>
int main(int argc, char *argv[])
{
  GtkWidget *button, *window, *vbox;
  GtkButton *button2;

  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title (GTK_WINDOW (window), "Tool Tip Test");
  gtk_widget_set_size_request (window, 200, 200);
  gtk_container_set_border_width (GTK_CONTAINER (window), 5);
  g_signal_connect (G_OBJECT (window), "destroy",
      G_CALLBACK (gtk_main_quit), NULL);

  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
  button = gtk_button_new_with_label ("Click me");
  gtk_widget_set_tooltip_text (button, "Tooltip of button");
  gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 5);

  button2 = gtk_button_new_with_label ("No, click me");
  gtk_widget_set_tooltip_text (GTK_WIDGET (button2), "Tooltip of button2");
  gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (button2), TRUE, TRUE, 5);


  gtk_container_add (GTK_CONTAINER (window), vbox);

  gtk_widget_show_all (window);

  gtk_main ();
  return 0;
}

以下から GTK_WIDGET() を削除すると:

  gtk_widget_set_tooltip_text (GTK_WIDGET (button2), "Tooltip of button2");
  gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (button2), TRUE, TRUE, 5);

私の GCC はこれらの警告をスローします。

したがって、Gtk のすべてのウィジェット変数を GtkWidget 型として初期化し、必要に応じて GTK_BUTTON()、GTK_CONTAINER、GTK_BOX()、GTK_WINDOW() を使用して、それらを他の型として再定義するのが良い方法です。

于 2013-05-16T16:48:27.707 に答える
1

さて、GtkTooltips は現在廃止されているため、オプション 2) はスキップします。オプション 1) については、私には完全に正しいように見えます...

したがって、最初に、両方のアプローチを混在させないでください。これが問題になる可能性があります...

于 2013-05-16T12:20:37.743 に答える