英文:
Problem with GTK3 and Glade in C language
问题
我的代码编译没有错误和警告,但当我运行它时,按钮不起作用,尽管信号已连接。
我正在使用C语言、GTK3和Glade,并使用Code::Blocks作为IDE。
我不明白为什么按钮不起作用。信号已连接,而且没有来自每个按钮的命令行输出。我是不是连接了错误的信号或者出了什么问题?
预期按钮执行函数,但它们没有响应。
英文:
my code compiles with no errors and no warnings, but, when i run it, the buttons doesnt work, even thought the signals are connected.
I am using C language, GTK3 and Glade, and using Code::Blocks as IDE.
The code:
#include <stdio.h>
#include <stdlib.h>
#include "manipulador_texto.h"
#include <gtk/gtk.h>
/*
ESTE PROGRAMA CRIA CADASTROS SIMPLES E OS ARMAZENA EM FORMATO DE ARQUIVOS BINARIOS
As funções estão documentadas no arquivo manipulador_texto.c
Estrutura basica do cadastro:
    int codigo; - código identificador do cadastro, gerado automaticamente
    int idade;
    int telefone;
    char nome[20];
    int cpf;
    Progresso: modelo definido, falta a criação do arquivo em si
    Função de cadastro novo:
    Função de listar cadastros: pronto!
    Função de alterar cadastros: nada feito
*/
void fechar_janela();
void listar_cadastro();
void teste();
int main(int argc, char **argv)
{
    GtkBuilder *construtor = NULL;
    GtkWidget *Janela = NULL;
    GtkWidget *box1 = NULL;
    GtkWidget *botao_criar_cadastro = NULL;
    GtkWidget *botao_listar_cadastro = NULL;
    GtkWidget *botao_alterar_cadastro = NULL;
    GtkWidget *criar_janela = NULL;
    gtk_init(&argc, &argv);
    construtor = gtk_builder_new_from_file("glade.glade");
    if(construtor == NULL)
        {
            printf("ERRO! o arquivo glade.glade nao foi encontrado!\n");
            return 1;
        }
    Janela = GTK_WIDGET(gtk_builder_get_object(construtor, "Janela"));
    box1 = GTK_WIDGET(gtk_builder_get_object(construtor, "box1"));
    if(box1 == NULL)
    {
        printf("ERRO! nao foi possivel carregar o Widget box1\n");
        return 1;
    }
    botao_criar_cadastro = GTK_WIDGET(gtk_builder_get_object(construtor, "botao_criar_cadastro"));
    if(botao_criar_cadastro == NULL)
    {
        printf("ERRO! nao foi possivel carregar o Widget botao_criar_cadastro\n");
        return 1;
    }
    botao_listar_cadastro = GTK_WIDGET(gtk_builder_get_object(construtor, "botao_listar_cadastro"));
    if(botao_listar_cadastro == NULL)
    {
        printf("ERRO! nao foi possivel carregar o Widget botao_listar_cadastro\n");
        return 1;
    }
    botao_alterar_cadastro = GTK_WIDGET(gtk_builder_get_object(construtor, "botao_alterar_cadastro"));
    if(botao_alterar_cadastro == NULL)
    {
        printf("ERRO! nao foi possivel carregar o Widget botao_alterar_cadastro\n");
        return 1;
    }
    criar_janela = GTK_WIDGET(gtk_builder_get_object(construtor, "criar_janela"));
    if(botao_alterar_cadastro == NULL)
    {
        printf("ERRO! nao foi possivel carregar o Widget criar_janela\n");
        return 1;
    }
    g_signal_connect(Janela, "destroy", G_CALLBACK(fechar_janela), NULL);
    g_signal_connect(botao_criar_cadastro, "activate", G_CALLBACK(criar_cadastro), NULL);
    g_signal_connect(botao_listar_cadastro, "activate", G_CALLBACK(listar_cadastro), NULL);
    g_signal_connect(botao_alterar_cadastro, "activate", G_CALLBACK(alterar_cadastro), NULL);
    g_signal_connect(criar_janela, "activate", G_CALLBACK(teste), NULL);
    g_object_unref(construtor);
    gtk_widget_show(Janela);
    gtk_main();
    return 0;
}
void fechar_janela()
{
    gtk_main_quit();
}
void teste()
{
    GtkWidget *novaJanela = NULL;
    novaJanela = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(novaJanela), 400,400);
    gtk_window_set_title(GTK_WINDOW(novaJanela), "TESTE!");
    gtk_widget_show_all(novaJanela);
    return;
}
I do not understand why the buttons doesnt work. The signals are connected, and there is no output in the command line from every button. I am connecting the signals wrong or what?
Expected the buttons to execute the functions, but they do not respond.
答案1
得分: 1
你需要使用 clicked 信号而不是 activate 信号来处理按钮。
英文:
You need to use the clicked signal instead of the activate signal for the buttons.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论