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

标签 c gtk3 cairo gdk

我从其中一个在线教程中提取了以下代码。当我使用 gtk+-2.0 时,下面的代码工作正常。

但是当我尝试用 gtk+-3.0 编译时,代码给出了这个错误:

signal 'expose-event' is invalid for instance of type 'GtkWindow'

所以我尝试执行以下操作,但仍然无济于事。它给出了另一个错误:

signal 'expose-event' is invalid for instance of type '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;
}

最佳答案

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

The GtkWidget “expose-event” signal has been replaced by a new “draw” signal, which takes a cairo_t instead of an expose event. The cairo context is being set up so that the origin at (0, 0) coincides with the upper left corner of the widget, and is properly clipped.

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

关于c - Signal::expose-event 对 GdkWindow 和 GdkX11Window 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49744185/

相关文章:

c - 如何修复 "warning: multi-character character constant [-Wmultichar]"

c - 在C中包含头文件并编译

gtk - 如何在 Cairo 表面(内部)上显示 Gtk Widget?

r - 在 R 中,是否可以设置开罗窗口的标题?

Python - 'MSVCCompiler' 对象没有属性 'compiler'

windows - haskell ,GHC,win32,开罗

c - Linux C++ : test of the cacheline size performance effect not as expected

C 代码没有做它应该做的事情

linux - 错误 : ld. 所以:无法预加载来自 LD_PRELOAD 的对象 'libgtk3-nocsd.so.0'

c - GTK:设置C中网格的大小