2

私は Glade の初心者ですが、C プログラミングの経験があります。

2 つの値を受け入れて合計を表示するプロジェクトを構築しようとしています。

私は以下を使用しました:

textbox1 - (entry1) ---- for first value,
textbox2 - (entry2) ---- for 2nd value,
textbox3 - (entry3) ---- to display result,
button - (button1) ---- to calculate sum,
signal - (on_button1_clicked) ---- to handle sum function.

信号コードを教えてください。

#include <gtk/gtk.h>
#include <stdio.h>

    GtkBuilder *builder;
    GtkWidget  *window;
    GError     *error = NULL;

void on_button1_clicked
{

// Need Help in this section

}

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. If error occurs, report it and quit application.
     * Replace "tut.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 );
}

サンプルコードのイメージ

4

3 に答える 3

2
#include <gtk/gtk.h>
#include<stdio.h>
#include<stdlib.h>
#include <string.h>

/*i have grouped all the widgets in one structure. this technique will 
help if you have huge number of  windows in your project. 
as the number of window will increase the variable we declare will increase
 and the declared variables can have same name of different windows */
struct login_window
{
   GtkEntry *e1;//textbox1
   GtkEntry *e2;//textbox2
   GtkEntry *e3;//textbox3
};
typedef struct login_window widgets;


G_MODULE_EXPORT void on_window1_destroy ()
{
    gtk_main_quit ();
}


G_MODULE_EXPORT void on_button1_clicked ( GtkButton *button,widgets *widg )
{
    char ch1[5],ch2[5],ch[5];
    int a;
//getting text from the text boxes
 const gchar *text1 = gtk_entry_get_text( widg->e2 );
 const gchar *text2 = gtk_entry_get_text( widg->e1 );

 //copying the text of textbox into an array
 strcpy(ch1,text1);
 strcpy(ch2,text2);

 //converting characters to integer and adding them
 a=(atoi(ch1))+(atoi(ch2));

itoa(a,ch,5);//converting integer to character
 gtk_entry_set_text (widg->e3,ch);//setting or displaying text(output) to the third text box
}

int main(int argc, char *argv[])
{
    GtkBuilder *gtkBuilder;
    widgets   widg;
    GtkWidget  *window;

    gtk_init(&argc, &argv);
    gtkBuilder = gtk_builder_new();

    gtk_builder_add_from_file(gtkBuilder, "window.glade", NULL);


    window = GTK_WIDGET( gtk_builder_get_object( gtkBuilder, "window1") );

//connecting each structure member to it appropriate gtkwidget
    widg.e1 = GTK_ENTRY( gtk_builder_get_object( gtkBuilder, "entry1" ) ); 
    widg.e2 = GTK_ENTRY( gtk_builder_get_object( gtkBuilder, "entry2" ) );
    widg.e3 = GTK_ENTRY( gtk_builder_get_object( gtkBuilder, "entry3" ) );

/*connecting signals so that appropriate handlers can be called when button is clicked*/
    gtk_builder_connect_signals( gtkBuilder, &widg );

    g_object_unref(G_OBJECT(gtkBuilder));
    gtk_widget_show(window);//showing the window
    gtk_main();

    return 0;
}
于 2014-10-15T20:35:08.627 に答える
1

正確な方法については説明しませんが、問題を論理的に考えてください。

  1. からテキストを取得しentry1entry2
  2. 文字列を整数に変換します。
  3. それらを一緒に追加します
  4. 答えを文字列に変換する
  5. テキストをオンに設定entry3

ドキュメントで、これの Gtk+ 部分を実行するための便利な関数を見つけることができると確信しています: GtkEntry ドキュメント

于 2013-03-11T17:25:30.767 に答える