C g_信号_连接_交换的连接失败

C g_信号_连接_交换的连接失败,c,callback,gtk3,glade,gtk2,C,Callback,Gtk3,Glade,Gtk2,在过去的一个月里,我试着学习将gtk用于应用程序,并将其代码从gtk2迁移到gtk3。但是,gtk对话框中的一个按钮似乎不能很好地工作,尽管我选择了什么,但对话框关闭时没有调用回调函数 int validation_pmu_server (GtkButton *button, gpointer udata) { /* local variables */ int tmp_p; char *msg; const char *text1, *text2; /* Get the text entr

在过去的一个月里,我试着学习将gtk用于应用程序,并将其代码从gtk2迁移到gtk3。但是,gtk对话框中的一个按钮似乎不能很好地工作,尽管我选择了什么,但对话框关闭时没有调用回调函数

int validation_pmu_server (GtkButton *button, gpointer udata)
{

/* local variables */
int tmp_p;
char *msg;
const char *text1, *text2;

/* Get the text entries filled by user */
text1 = gtk_entry_get_text(GTK_ENTRY(p_port));
text2 = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(p_protocol));

if(!isNumber((char *)text1) && (atoi(text1) < 1500 || (atoi(text1) > 65535)))   /* Check for valid port number */       
{ 
    msg = "\tPlease enter valid value for PMU Server Port\t\n";
    validation_result (msg);        /* Show the unsuccess message to user */
    return 0;
}
else
{
    strncpy(PMUprotocol, text2, 3);
    PMUport = atoi(text1);

    if(!strcmp(text2, "UDP"))
        tmp_p = 1;          
    else
        tmp_p = 2;          

    p1 = *ShmPTR;
    p1.cfg_bit_change_info = 0;
    ShmPTR->cfg_bit_change_info = 0;
    ShmPTR->serverProtocol = tmp_p;
    ShmPTR->serverPort = atoi(text1);

    p1.pid = ShmPTR->pid;

    kill(p1.pid, SIGUSR2);
    printf("PORT & Protocol information has sent to PMU Server through signal.\n");

    memset(pmuFilePath, '\0', 200);

    gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->start_server), FALSE);
    gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->open_cfg), FALSE);

    gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->create_cfg_button), TRUE);                    
    gtk_widget_set_sensitive(GTK_WIDGET(pmu_data->menu_setup_cfg), TRUE);                   

    /* Close/destroy the pmu_server_window */
    gtk_widget_destroy(pmu_server_window);

    return 1;
}
};

void pmu_server ()
{
/* local variables */
GtkWidget *table, *label, *cancel_button;
GtkWidget *valdbutton, *help_button;

/* Create a new dialog window for PMU Server Setup */
pmu_server_window = gtk_dialog_new ();
g_signal_connect (pmu_server_window, "destroy", G_CALLBACK (gtk_widget_destroy), pmu_server_window);
gtk_window_set_title (GTK_WINDOW (pmu_server_window), "PMU Server Setup");
gtk_container_set_border_width (GTK_CONTAINER (pmu_server_window), 10);

/* Create a table of 4 by 2 squares. */
table = gtk_grid_new (); // table = gtk_table_new (6, 2, FALSE);

/* Set the spacing to 50 on x and 5 on y */
gtk_grid_set_row_spacing (GTK_GRID(table), 16); // gtk_table_set_row_spacings (GTK_TABLE  (table), 8);
gtk_grid_set_column_spacing (GTK_GRID(table), 16); // gtk_table_set_col_spacings (GTK_TABLE  (table), 2);

/* Pack the table into the window */
//gtk_box_pack_start (GTK_BOX (GTK_DIALOG(pmu_server_window)->vbox), table, TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG(pmu_server_window))), table, TRUE, TRUE, 0);
gtk_widget_show (table);

/* Add few buttons to the bottom of the dialog */
valdbutton = gtk_dialog_add_button((GtkDialog *)pmu_server_window, "Run", GTK_RESPONSE_OK); // gtk_button_new_with_label ("Run");
help_button = gtk_dialog_add_button((GtkDialog *)pmu_server_window, "Help", GTK_RESPONSE_APPLY); // gtk_button_new_with_label ("Help");
cancel_button = gtk_dialog_add_button((GtkDialog *)pmu_server_window, "Cancel", GTK_RESPONSE_CLOSE); //gtk_button_new_with_label ("Cancel");

/* This simply creates a grid of toggle buttons on the table */
label = gtk_label_new (" ");
markup = g_markup_printf_escaped ("<span foreground=\"#990033\" font='12'><b>Enter PMU Server Details</b></span>");
gtk_label_set_markup (GTK_LABEL (label), markup);
gtk_grid_attach (GTK_GRID (table), label, 0,0,2,1); // gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 0, 1);
gtk_widget_show (label);
g_free (markup);

label = gtk_label_new ("Server Port");
    // gtk_misc_set_alignment (GTK_MISC(label),0,0);
    gtk_label_set_xalign (GTK_LABEL (label),0);
    gtk_label_set_yalign (GTK_LABEL (label),0);
gtk_grid_attach (GTK_GRID (table), label, 0, 2, 1, 1); // gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3);
gtk_widget_show (label);

label = gtk_label_new ("Protocol");
    // gtk_misc_set_alignment (GTK_MISC(label),0,0);
    gtk_label_set_xalign (GTK_LABEL (label),0);
    gtk_label_set_yalign (GTK_LABEL (label),0);
gtk_grid_attach (GTK_GRID (table), label, 0, 3, 1, 1); // gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4);
gtk_widget_show (label);

/* Create text boxes for user to enter appropriate values */
p_port = gtk_entry_new();
gtk_entry_set_max_length ((GtkEntry *)p_port, 5);
gtk_grid_attach (GTK_GRID (table), p_port, 1, 2, 1, 1); // gtk_table_attach_defaults (GTK_TABLE (table), p_port, 1, 2, 2, 3);
gtk_widget_show (p_port);

label = gtk_label_new (" ");
markup = g_markup_printf_escaped ("<span foreground=\"#333333\" font='8'><b>Note : Use the unreserved ports for PMU Server.</b></span>");
gtk_label_set_markup (GTK_LABEL (label), markup);
    // gtk_misc_set_alignment (GTK_MISC(label),0,0);
    gtk_label_set_xalign (GTK_LABEL (label),0);
    gtk_label_set_yalign (GTK_LABEL (label),0);
gtk_grid_attach (GTK_GRID (table), label, 0, 5, 2, 1); // gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 2, 5, 6);
gtk_widget_show (label);
g_free (markup);

/* Create combo boxe for user with some fixed values */
p_protocol = gtk_combo_box_text_new();
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(p_protocol), "UDP");
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(p_protocol), "TCP");
gtk_combo_box_set_active(GTK_COMBO_BOX(p_protocol), 0);
gtk_grid_attach (GTK_GRID (table), p_protocol, 1, 3, 1, 1); // gtk_table_attach_defaults (GTK_TABLE (table), p_protocol, 1, 2, 3, 4);
gtk_widget_show (p_protocol);

/* Signal handling for buttons on PMU Server Setup Window */
g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (validation_pmu_server), valdbutton);
g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (Pmu_Help), NULL);
g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), pmu_server_window);
g_signal_connect_swapped (pmu_server_window, "response", G_CALLBACK (gtk_widget_destroy), pmu_server_window);

/* This makes it so the button is the default. */
// gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pmu_server_window)->action_area), valdbutton, TRUE, TRUE, 0);
// gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pmu_server_window)->action_area), help_button, TRUE, TRUE, 0);
// gtk_box_pack_start (GTK_BOX (GTK_DIALOG (pmu_server_window)->action_area), cancel_button, TRUE, TRUE, 0);        

/* This grabs this button to be the default button. Simply hitting the "Enter" key will cause this button to activate. */
gtk_widget_grab_default (valdbutton);
gtk_widget_show (valdbutton);
gtk_widget_grab_default (help_button);
gtk_widget_show (help_button);
gtk_widget_grab_default (cancel_button);
gtk_widget_show (cancel_button);

/* Finally show the pmu_server_window */
gtk_widget_show (pmu_server_window);
};
int-validation\u-pmu\u服务器(GtkButton*按钮,gpointer-udata)
{
/*局部变量*/
国际电信管理局;
char*msg;
常量字符*text1,*text2;
/*获取用户填写的文本条目*/
text1=gtk_条目_获取_文本(gtk_条目(p_端口));
text2=gtk组合框文本获取活动文本(gtk组合框文本(p_协议));
如果(!isNumber((char*)text1)&&(atoi(text1)<1500 | |(atoi(text1)>65535))/*请检查有效的端口号*/
{ 
msg=“\t请输入PMU服务器端口的有效值\t\n”;
验证结果(msg);/*向用户显示未成功消息*/
返回0;
}
其他的
{
strncpy(PMUprotocol,text2,3);
PMUport=atoi(text1);
如果(!strcmp(text2,“UDP”))
tmp_p=1;
其他的
tmp_p=2;
p1=*ShmPTR;
p1.cfg_位_变化_信息=0;
ShmPTR->cfg\u bit\u change\u info=0;
ShmPTR->serverProtocol=tmp\u p;
ShmPTR->serverPort=atoi(text1);
p1.pid=ShmPTR->pid;
压井(p1.pid,SIGUSR2);
printf(“端口和协议信息已通过信号发送到PMU服务器。\n”);
memset(pmuFilePath,'\0',200);
gtk_小部件设置敏感(gtk_小部件(pmu数据->启动_服务器),FALSE);
gtk_小部件设置敏感(gtk_小部件(pmu数据->打开_cfg),FALSE);
gtk_小部件设置敏感(gtk_小部件(pmu_数据->创建_cfg_按钮),TRUE);
gtk_小部件设置敏感(gtk_小部件(pmu数据->菜单设置),TRUE);
/*关闭/销毁pmu_服务器_窗口*/
gtk_小部件_销毁(pmu_服务器_窗口);
返回1;
}
};
无效pmu_服务器()
{
/*局部变量*/
GtkWidget*表格、*标签、*取消按钮;
GtkWidget*valdbutton,*help_按钮;
/*为PMU服务器设置创建新的对话框窗口*/
pmu_server_window=gtk_dialog_new();
g_信号_连接(pmu_服务器_窗口,“销毁”、g_回调(gtk_小部件_销毁)、pmu_服务器_窗口);
gtk_窗口设置标题(gtk_窗口(pmu服务器窗口),“pmu服务器设置”);
gtk_容器_设置_边框_宽度(gtk_容器(pmu服务器_窗口),10);
/*创建一个4乘2的正方形表格*/
table=gtk_grid_new();//table=gtk_table_new(6,2,FALSE);
/*将x上的间距设置为50,y上的间距设置为5*/
gtk_网格设置行间距(gtk_网格(表格),16);//gtk_表格设置行间距(gtk_表格,8);
gtk_网格设置列间距(gtk_网格(表格),16);//gtk_表格设置列间距(gtk_表格(表格),2);
/*把桌子装进窗户里*/
//gtk_-box_-pack_-start(gtk_-box(gtk_对话框(pmu_服务器_窗口)->vbox),表格,TRUE,TRUE,0);
gtk_框包装开始(gtk_框(gtk_对话框获取内容区域(gtk_对话框(pmu服务器窗口))),表,真,真,0);
gtk_widget_show(表格);
/*在对话框底部添加几个按钮*/
valdbutton=gtk_对话框添加按钮((GtkDialog*)pmu_服务器窗口,“运行”,gtk_响应确定);//gtk_按钮带有新标签(“运行”);
help_button=gtk_dialog_add_button((GtkDialog*)pmu_服务器_窗口,“help”,gtk_RESPONSE_APPLY);//gtk_button_new_with_标签(“help”);
取消按钮=gtk按钮对话框添加按钮((GtkDialog*)pmu服务器窗口,“取消”,gtk按钮响应关闭);//gtk按钮带有新标签(“取消”);
/*这只是在表上创建一个切换按钮网格*/
标签=gtk_标签_新(“”);
markup=g_markup_printf_转义(“输入PMU服务器详细信息”);
gtk_标签_集合_标记(gtk_标签(标签),标记);
gtk_表格附加(gtk_表格,标签,0,0,2,1);//gtk_表格附加默认值(gtk_表格,标签,0,2,0,1);
gtk_widget_show(标签);
g_自由(标记);
label=gtk_label_new(“服务器端口”);
//gtk_misc_set_校准(gtk_misc(标签),0,0);
gtk_标签_集合_xalign(gtk_标签(标签),0);
gtk_标签设置(gtk_标签(标签),0);
gtk_表格附加(gtk_表格,标签,0,2,1,1);//gtk_表格附加默认值(gtk_表格,标签,0,1,2,3);
gtk_widget_show(标签);
标签=gtk_标签_新(“协议”);
//gtk_misc_set_校准(gtk_misc(标签),0,0);
gtk_标签_集合_xalign(gtk_标签(标签),0);
gtk_标签设置(gtk_标签(标签),0);
gtk_表格附加(gtk_表格,标签,0,3,1,1);//gtk_表格附加默认值(gtk_表格,标签,0,1,3,4);
gtk_widget_show(标签);
/*创建文本框供用户输入适当的值*/
p_port=gtk_entry_new();
gtk_入口_设置_最大长度((GtkEntry*)p_端口,5);
gtk_网格附接(gtk_网格(表格),p_端口,1,2,1,1);//gtk_表格附接默认值(gtk_表格(表格),p_端口,1,2,2,3);
gtk_widget_show(p_端口);
标签=gtk_标签_新(“”);
markup=g_markup_printf_转义(“注意:为PMU服务器使用未保留的端口”);
gtk_标签_集合_标记(gtk_标签(标签),标记);
//gtk_misc_set_校准(gtk_misc(标签),0,0);
gtk_标签_集合_xalign(gtk_标签(标签),0);
gtk_标签设置(gtk_标签(标签),0);
gtk_表格附加(gtk_表格,标签,0,5,2,1);//gtk_表格附加默认值(gtk_表格,标签,0,2,5,6);
gtk_widget_show(标签);
g_自由(标记);
/*使用一些固定值为用户创建组合框*/
p_协议=gtk_组合框_文本_新();
gtk_组合框_文本_追加_文本(gtk_组合框_文本(p_协议),“UDP”);
gtk_组合框_文本_追加_文本(gtk_组合框_文本(p_协议),“TCP”);
gtk_组合框设置激活(gtk_组合框(p_协议),0);
gtk_-grid_-attach(gtk_-grid(table),p_协议,1,3,1);//gtk_-table_-attach_默认值(gtk_-table(table),p_协议,1,2,3,4);
gtk_widget_show(p_协议);
/*PMU服务器设置窗口上按钮的信号处理*/
g_信号连接交换(valdbutton,“点击”,g_回调(验证pmu服务器),valdbutton);
g_信号连接交换(帮助按钮,“点击”,g_回调(Pmu帮助),空);
g_信号连接交换(取消按钮,“点击”,g_回调(gtk_小部件销毁),pmu服务器窗口);
g_信号连接
g_signal_connect_swapped (pmu_server_window, "response", G_CALLBACK (gtk_widget_destroy), pmu_server_window);
g_signal_connect_swapped (pmu_server_window, "destroy", G_CALLBACK (gtk_widget_destroy), pmu_server_window);
#include<stdio.h>
#include <gtk/gtk.h>


void Pmu_Help(){
    printf("Pmu_Help");
    fflush(stdout);
}
void validation_pmu_server(){
    printf("validation_pmu_server");
    fflush(stdout);
}
void response(){
    printf("response");
    fflush(stdout);
}


int main(int argc, char *argv[]) {

    GtkWidget *window;
    GtkWidget * pmu_server_window;

    gtk_init(&argc, &argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(window);
  
    g_signal_connect(window, "destroy",
      G_CALLBACK(gtk_main_quit), NULL);

    pmu_server_window = gtk_dialog_new ();
    g_signal_connect (pmu_server_window, "destroy", G_CALLBACK (gtk_widget_destroy), pmu_server_window);
    gtk_window_set_title (GTK_WINDOW (pmu_server_window), "PMU Server Setup");
    gtk_container_set_border_width (GTK_CONTAINER (pmu_server_window), 10);

    GtkWidget *table, *label, *cancel_button;
    GtkWidget *valdbutton, *help_button;

    valdbutton = gtk_dialog_add_button((GtkDialog *)pmu_server_window, "Run", GTK_RESPONSE_OK); // gtk_button_new_with_label ("Run");
    help_button = gtk_dialog_add_button((GtkDialog *)pmu_server_window, "Help", GTK_RESPONSE_APPLY); // gtk_button_new_with_label ("Help");
    cancel_button = gtk_dialog_add_button((GtkDialog *)pmu_server_window, "Cancel", GTK_RESPONSE_CLOSE); //gtk_button_new_with_label ("Cancel");

    g_signal_connect_swapped (valdbutton, "clicked", G_CALLBACK (validation_pmu_server), valdbutton);
    g_signal_connect_swapped (help_button, "clicked", G_CALLBACK (Pmu_Help), NULL);
    g_signal_connect_swapped (cancel_button, "clicked", G_CALLBACK (gtk_widget_destroy), pmu_server_window);
    g_signal_connect_swapped (pmu_server_window, "response", G_CALLBACK (response), pmu_server_window);
    //g_signal_connect_swapped (pmu_server_window, "response", G_CALLBACK (gtk_widget_destroy), pmu_server_window);
    gtk_widget_show(pmu_server_window);

    gtk_main();

  return 0;
}