c++ - 如何将 cairo_surface_t 作为 g_signal_connect 中的参数传递?
问题描述
我打算为所有configure-event
和g_signal_connect
. 它看起来像这样:
int
generic_configure_event(
GtkWidget *widget,
GdkEventConfigure *event,
void *gData)
{
cairo_surface_t *surface = static_cast<cairo_surface_t *>(gData);
...
if (*surface)
cairo_surface_destroy(*surface);
*surface = gdk_window_create_similar_surface(
gtk_widget_get_window(widget), CAIRO_CONTENT_COLOR,
save_w, save_h);
cairo_t *cr = cairo_create(*surface);
return TRUE;
}
int
main(){
g_signal_connect(widget1,"configure-event",G_CALLBACK(generic_configure_event),&surface1);
g_signal_connect(widget2,"configure-event",G_CALLBACK(generic_configure_event),&surface2);
g_signal_connect(widget3,"configure-event",G_CALLBACK(generic_configure_event),&surface3);
...
}
更复杂的是,除了将cairo_surface_t
作为参数传递之外,我们还必须更新generic_configure_event
. 使用上面的方法给我一个段错误,这样做的正确方法是什么?
解决方案
推荐阅读
- android-studio - 如何在颤动中禁用自动 TODO 评论?
- algorithm - 在迷宫中使用曼哈顿距离的广度优先搜索与 A*
- c - 如何在 C 中的 char 数组中更改位图的一位?
- linux - -bash: dir: command not found - 如何恢复linux的基本命令
- python - TypeError: search_country() 接受 0 个位置参数,但给出了 1 个
- javascript - Javascript回调不能在变量中赋值
- flutter - 从子项弹出时,根小部件未重建
- javascript - 如何在中心而不是顶部开始滚动(溢出-y:滚动)div?
- android - NotificationCompat - 无法阻止重新启动
- sql-server - 用于 SQL Server 的 Oracle 函数交换