我在写一个打印银行存款单的程序。UI包括存款凭证的GtkDrawingArea
预览。当用户输入要存入的金额时,预览将使用新的/修改的金额和交存的总额进行更新。
我用什么信号回叫组合来重绘预览?
我的当前实现使用了两个信号回调组合。第一个信号回叫是在包含存款量的小区上进行的.当信号“编辑”被触发时,回调deposit_amount_edited
就会运行。
g_signal_connect(G_OBJECT(rendererChecks), "edited", G_CALLBACK(deposit_amount_edited), pointer_passer);
在回调draw_background
中,我在绘图区域发出一个绘图信号。
void deposit_amount_edited(GtkCellRendererText *self,
gchar *path,
gchar *new_text,
gpointer data) {
GHashTable *pointer_passer = (GHashTable *)data; /* Hash table containing all sorts of pointers */
/* Retrieve the pointer to the GtkDrawingArea */
GtkDrawingArea *drawing_area = (GtkDrawingArea *)g_hash_table_lookup(pointer_passer, &KEY_DRAWING_AREA);
g_signal_emit_by_name(drawing_area, "draw", data); /*Seg fault */
}
我在g_signal_emit_by_name
上发现了一个分割错误。
更重要的是,在GtkTreeView
中编辑单元格后,重新绘制预览的最佳方法是什么?
发布于 2021-12-19 10:14:23
虽然我没有第一个问题的答案,但我确实有第二个问题的答案。在上面的函数deposit_amount_edited
中,我用正确绘制预览的gtk_widget_queue_draw(GTK_WIDGET(drawing_area));
替换了g_signal_emit_by_name
。
https://stackoverflow.com/questions/70408611
复制