Signal :: expose-event对GdkWindow和GdkX11Window无效

时间:2018-04-10 02:03:36

标签: c gtk3 cairo gdk

我从在线教程中获得了以下代码。当我使用gtk + -2.0时,以下代码工作正常。

但是当我尝试使用gtk + -3.0进行编译时,代码会出现此错误:

  

信号'expose-event'对于'GtkWindow'

类型的例子无效

所以我尝试做以下事情,但仍然没有帮助。它又给出了另一个错误:

  

信号'expose-event'对于'GdkX11Window'

类型的例子无效
gtk_widget_realize(window);
GdkWindow *gdkwin = gtk_widget_get_window(Gwindow);
int main(int argc, char *argv[])
{
  GtkWidget *window;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

  g_signal_connect(window, "expose-event",
  G_CALLBACK (on_expose_event), NULL);
  g_signal_connect(window, "destroy",
  G_CALLBACK (gtk_main_quit), NULL);

  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_window_set_default_size(GTK_WINDOW(window), 300, 230); 
  gtk_widget_set_app_paintable(window, TRUE);

  gtk_widget_show_all(window);

  gtk_main();
  return 0;
}

1 个答案:

答案 0 :(得分:2)

Migrating from gtk2 to gtk3,第 Changes that need to be done at the time of the switch部分

  

GtkWidget“expose-event”信号已被新的“draw”信号取代,该信号采用cairo_t而不是曝光事件。正在设置cairo上下文,以便(0,0)处的原点与窗口小部件的左上角重合,并被正确剪裁。

无需连接任何信号即可使代码正常工作。