Signal :: expose-event对于GdkWindow和GdkX11Window无效 [英] Signal ::expose-event is invalid for GdkWindow and GdkX11Window
问题描述
我从网上的一个教程中获得了以下代码.当我使用gtk + -2.0时,以下代码可以正常工作.
I had this following code pull from one of the tutorials on line. When I use gtk+-2.0, the following code works fine.
但是当我尝试使用gtk + -3.0进行编译时,代码给出了以下错误:
But when I try compile with gtk+-3.0, the code gives this error:
信号'expose-event'对于类型'GtkWindow'的实例无效
signal 'expose-event' is invalid for instance of type 'GtkWindow'
因此,我尝试执行以下操作,但仍无济于事.并给出了另一个错误:
So I try to do the following, but still doesn't help. And it gives another error:
信号'expose-event'对于类型'GdkX11Window'的实例无效
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;
}
推荐答案
从gtk2迁移到gtk3 ,第
已将GtkWidget的曝光事件"信号替换为新的绘制"信号,该信号采用cairo_t而不是曝光事件.正在设置cairo上下文,以使(0,0)的原点与窗口小部件的左上角重合,并被正确裁剪.
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.
无需连接任何信号即可使代码正常工作.
There is no need to connect to any signals to make your code work.
这篇关于Signal :: expose-event对于GdkWindow和GdkX11Window无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!