我有一个main.c文件,其中创建了一个进度条,然后它将由other.c文件更新。
在main.c文件中,我有以下内容:
static void
a_func ( GtkWidget *dialog,
struct widget_t *Widget,
gint mode)
{
....
....
Widget->pBar = gtk_progress_bar_new ();
....
....
}它创建并运行一个对话框。当OK被推送时,将调用my_func (Widget);。
在other.c文件中,我有以下内容:
static gboolean
fill (gpointer data)
{
GtkWidget *bar = data;
gtk_progress_bar_pulse (GTK_PROGRESS_BAR (bar));
return TRUE;
}
gint my_func (struct mystruct_t *Widget){
....
....
gtk_progress_bar_pulse (GTK_PROGRESS_BAR (Widget->pBar));
g_timeout_add (100, fill, GTK_PROGRESS_BAR (Widget->pBar));
while (gtk_events_pending ())
gtk_main_iteration ();
....
....
}问题是我得到了这个错误:
GLib-GObject-WARNING **: invalid unclassed pointer in cast to 'GtkProgressBar'
Gtk-CRITICAL **: gtk_progress_bar_pulse: assertion 'GTK_IS_PROGRESS_BAR (pbar)' failed编辑1:
这是一个可编译的示例:https://gist.github.com/polslinux/96e7b18176ac66e50ee1
编辑2:
这是一个简单的工作流图:http://it.tinypic.com/r/316us0y/8
发布于 2014-08-04 17:57:52
这是行不通的:
crypt_file (Widget);
gtk_widget_destroy (dialog);在主循环中添加一个GSource,这会修改Widget->pBar ,但永远不会删除。另一方面,您破坏了对话框(因此也破坏了pBar本身,因为它是小部件子树的一部分),这反过来又使Widget->pBar变得无用/使它成为一个悬空的指针。
你没有要求的东西(原谅直接的方法)
Widget,它们不是小部件,而只是结构。GObject派生的klass,它在内部处理混乱,而不是传递半透明的结构。https://stackoverflow.com/questions/25104547
复制相似问题