界面设计器:找不到信号处理程序
Glade Interface Designer: could not find signal handler
我是GTK的新手。我在使用Glade Interface Designer设计UI时遇到了这样的问题。我的目的是设计两个窗口。main_window中的一个按钮控制create_log_in_window的外观。我在Glade中添加了函数"create_log_in_window"和对象"main_window"。但是,当我运行程序时,按钮无效。这样的警告正在出现。以下是代码和警告:
Gtk-WARNING:无法在create_log_in_window中找到信号处理程序
#include <gtk/gtk.h>
int main (int argc, char *argv[]){
GtkBuilder *builder;
GtkWidget *main_window;
gtk_init (&argc, &argv);
builder = gtk_builder_new();
gtk_builder_add_from_file(builder,"main_window.glade", NULL);
main_window = GTK_WIDGET(gtk_builder_get_object(builder, "main_window"));
gtk_builder_connect_signals(builder, NULL);
g_object_unref(G_OBJECT(builder));
gtk_widget_show_all(main_window);
gtk_main();
return 0;
}
gboolean create_log_in_window(GtkWidget *main_window){
GtkBuilder *builder;
GtkWidget *window;
gtk_widget_hide_all(main_window);
builder = gtk_builder_new();
gtk_builder_add_from_file(builder,"log_in_window.glade",NULL);
window = GTK_WIDGET(gtk_builder_get_object(builder,"log_in_window"));
gtk_builder_connect_signals(builder,NULL);
g_object_unref(G_OBJECT(builder));
gtk_widget_show_all(window);
return true;
}
我参考了很多信息,最后在这个网站找到了一些有用的东西:http://blog.csdn.net/xuesen_lin/article/details/6001114关键是我们应该以一种特殊的方式定义函数,以便让板找到函数地址。也许我的描述不清楚。我将展示我的代码。
#include <gtk/gtk.h>
typedef struct _MainDate{
GtkWidget *main_window;
GtkWidget *delete_button;
}MainDate;
G_MODULE_EXPORT void delete_confirm_window( GtkButton *button, GtkWidget *popup ){
GtkBuilder *builder;
GtkWidget *delete_window;
GError *error = NULL;
builder = gtk_builder_new();
if(!(gtk_builder_add_from_file(builder,"delete_window.glade",&error))){
g_warning("%s",error->message);
g_free(error);
return ;
}
delete_window = GTK_WIDGET(gtk_builder_get_object(builder,"delete_confirm_window"));
gtk_builder_connect_signals(builder,NULL);
g_object_unref(builder);
gtk_widget_show(delete_window);
}
int main(int argc,char *argv[]){
GtkBuilder *builder;
MainDate *date;
GError *error = NULL;
gtk_init(&argc,&argv);
builder = gtk_builder_new();
if(!(gtk_builder_add_from_file(builder,"main_window.glade",&error))){
g_warning("%s",error->message);
g_free(error);
return 1;
}
date = g_slice_new(MainDate);
date->main_window = GTK_WIDGET(gtk_builder_get_object(builder,"main_window"));
date->delete_button = GTK_WIDGET(gtk_builder_get_object(builder,"delete_popmenu"));
gtk_builder_connect_signals(builder,date);
g_object_unref(builder);
gtk_widget_show_all(date->main_window);
gtk_main();
g_slice_free(MainDate,date);
return 0;
}
相关文章:
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 有可能在信号处理程序中设置promise吗
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 通过安装信号处理程序关闭多线程应用程序
- 为什么我的信号处理程序只执行一次?
- GTK C++:找不到信号处理程序 您是否使用 -rdynamic 进行了编译?
- C++ 在信号处理程序后继续执行
- 没有信号处理程序的POSIX定时器的目的是什么?
- 为什么这个信号处理程序不能捕获 SIGHUP 或 SIGQUIT?
- 如何在C++中使用 std::bind 函数作为信号处理程序?
- 在 C++17 中,是否未定义使用无锁原子学保护从信号处理程序传递的数据?
- 如何将信号处理程序添加为方法
- 窗口上信号处理程序的异步安全写入函数
- 使用信号处理程序处理从 FIFO 接收的数据
- gtkmm/glade - 将信号处理程序连接到 MenuShell
- GTK+3 编译错误"找不到信号处理程序",您是否使用 -rdynamic 进行了编译?
- Linux 中的信号处理程序使用 sigaction (C++)
- 使用 enum 参数将 C++ 对象信号连接到 QML 信号处理程序
- 信号处理程序不要求使用dlopen或dlclose