我从其中一个在线教程中提取了以下代码。当我使用 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/