Signal :: expose-event对于GdkWindow和GdkX11Window无效 [英] Signal ::expose-event is invalid for GdkWindow and GdkX11Window

查看:43
本文介绍了Signal :: expose-event对于GdkWindow和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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆