c - Glade3 和 C 编程

标签 c gtk glade

我正在尝试创建一个简单的应用程序,它接受两个整数并在单击“Sum”按钮时显示两个整数的和

我是 Glade3 的新手,所以你可能会犯错误

/*
 * Compile me with:
 *   gcc -o test test.c $(pkg-config --cflags --libs gtk+-2.0 gmodule-2.0)
 */

#include <gtk/gtk.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

GtkBuilder *builder;

GtkWidget  *window;

GError     *error = NULL;

void on_button1_clicked(GtkButton *button1, GtkEntry *entry1, GtkEntry *entry2, GtkEntry *entry3 )
{

    const char *input1 = (const char *)malloc(20);
    const char *input2 = (const char *)malloc(20);
    char *result = (char *)malloc(20);
    int input1_int, input2_int, result_int;

    g_print ("Check point 1\n"); //to help debugging
    input1 = gtk_entry_get_text(entry1); //fetching user data from entry1
    input2 = gtk_entry_get_text(entry2); //fetching user data from entry2
    g_print ("Check point 2\n"); //to help debugging

    input1_int = atoi(input1); // String to Integer Conversion
    input2_int = atoi(input2);

    result_int = input1_int + input2_int; //Sum operation

    sprintf(result, "%d", result_int);

    gtk_entry_set_text(entry3, result); //Pushing result of Sum operation into Entry3
}

void on_window1_destroy (GtkObject *object, gpointer user_data)
{
    gtk_main_quit();
}

int main( int argc, char **argv )`
{

    /* Init GTK+ */
    gtk_init( &argc, &argv );

    /* Create new GtkBuilder object */
    builder = gtk_builder_new();

    /* Load UI from file.
     * Replace "sum.glade" with your saved project. */
    if( ! gtk_builder_add_from_file( builder, "sum.glade", &error ) )
    {
        g_warning( "%s", error->message );
        g_free( error );
        return( 1 );
    }

    /* Get main window pointer from UI */
    window = GTK_WIDGET( gtk_builder_get_object( builder, "window1" ) );

    /* Connect signals */
    gtk_builder_connect_signals( builder, NULL );

    /* Destroy builder, since we don't need it anymore */
    g_object_unref( G_OBJECT( builder ) );

    /* Show window. All other widgets are automatically shown by GtkBuilder */
    gtk_widget_show( window );

    /* Start main loop */
    gtk_main();

    return( 0 );

}

输出: 检查点1

(测试:10082):Gtk-CRITICAL **:gtk_entry_get_text:断言“GTK_IS_ENTRY(条目)”失败段错误(核心转储)

enter image description here

最佳答案

您在此处为回调函数传递“NULL”:

gtk_builder_connect_signals( 构建器, NULL );

还要记住释放分配给 *input1*input2*result 的内存。

关于c - Glade3 和 C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16263216/

相关文章:

c++ - 安装 ddd - fatal error

c++ - Gtk 3.10 小部件是否向后兼容?

c - 我的 malloc 数组是否更改了意外的值?

如果在调用任何函数后调用 gtkfilechooser,C GTK+ 段错误

java - Swing 中的字体渲染丑陋

ubuntu - GtkDialog 映射时没有 transient 父级。这是不鼓励的,Katalon Studio Linux (Beta GUI) 出现错误

python - 如何在 GUI 中嵌入外部窗口(Python + Glade + Gtk3)

gtk - 如何在 Glade3 中将子级添加到 StatusBar?

c - 如何在 CUDA 中将包含数组的结构传递给内核?

C - 未收到 SIGALRM