quick.bent452 Temat założony przez niniejszego użytkownika |
[GTK+] GtkVBox Kolejność widżetów » 2016-04-11 20:29:03 Cześć :) Staram się nauczyć programowania GUI za pomocą GTK. Piszę w Code::Blocks na Windows. Napisałem taki program: #include <gtk/gtk.h>
int main( int argc, char * argv[] ) { GtkWidget * okno; GtkWidget * box1_0; GtkWidget * guzik; GtkWidget * box1_1; GtkWidget * przycisk[ 4 ]; gtk_init( & argc, & argv ); okno = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_window_set_position( GTK_WINDOW( okno ), GTK_WIN_POS_CENTER ); gtk_window_set_default_size( GTK_WINDOW( okno ), 250, 180 ); gtk_window_set_title( GTK_WINDOW( okno ), ":-)" ); gtk_container_set_border_width( GTK_CONTAINER( okno ), 5 ); box1_0 = gtk_vbox_new( FALSE, 1 ); gtk_container_add( GTK_CONTAINER( okno ), box1_0 ); box1_1 = gtk_table_new( 2, 2, TRUE ); gtk_table_set_row_spacings( GTK_TABLE( box1_1 ), 2 ); gtk_table_set_col_spacings( GTK_TABLE( box1_1 ), 2 ); przycisk[ 0 ] = gtk_button_new_with_label( "1" ); przycisk[ 1 ] = gtk_button_new_with_label( "2" ); przycisk[ 2 ] = gtk_button_new_with_label( "3" ); przycisk[ 3 ] = gtk_button_new_with_label( "4" ); gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 0 ], 0, 1, 0, 1 ); gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 1 ], 1, 2, 0, 1 ); gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 2 ], 0, 1, 1, 2 ); gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 3 ], 1, 2, 1, 2 ); gtk_container_add( GTK_CONTAINER( box1_0 ), box1_1 ); guzik = gtk_button_new_with_label( "a kuku" ); gtk_box_pack_start( GTK_BOX( box1_0 ), box1_1, TRUE, TRUE, 0 ); gtk_box_pack_start( GTK_BOX( box1_0 ), guzik, TRUE, TRUE, 0 ); g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL ); gtk_widget_show_all( okno ); gtk_main(); return 0; }
W programie staram się umieścić w kontenerze GtkVBox dwa widgety: jeden przycisk oraz kontener GtkTable z czterema przyciskami. To z czym mam problem to kolejność widgetów w oknie programu. To co otrzymuje po odpaleniu kodu to tablica na górze i pojedynczy przycisk na dole. Chciałbym mieć odwrotną kolejność: na górze pojedynczy przycisk pod spodem tabelka. Wydawało mi się, że wystarczy zamienić kolejność linijek: gtk_box_pack_start( GTK_BOX( box1_0 ), box1_1, TRUE, TRUE, 0 ); gtk_box_pack_start( GTK_BOX( box1_0 ), guzik, TRUE, TRUE, 0 );
To niestety nie pomaga. W jaki sposób mógłbym nadzorować kolejność widgetów? |
|
Kaikso |
» 2016-04-12 09:57:52 |
|
quick.bent452 Temat założony przez niniejszego użytkownika |
» 2016-04-12 19:35:35 Rozwiązałem swój problem. Dzięki Kaikso za linka. Wygląda na to, że wystarczyło przerzucić funkcję gtk_box_pack_start() przed blok tworzenia tablicy z guzikami. A konkretniej przed funkcję gtk_container_add. Poniżej wrzucam programik, może komuś się przyda :) #include <gtk/gtk.h> #include<string>
int main( int argc, char * argv[] ) { GtkWidget * okno; GtkWidget * box1_0; GtkWidget * guzik; GtkWidget * box1_1; GtkWidget * przycisk[ 4 ]; gtk_init( & argc, & argv ); okno = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_window_set_position( GTK_WINDOW( okno ), GTK_WIN_POS_CENTER ); gtk_window_set_default_size( GTK_WINDOW( okno ), 250, 180 ); gtk_window_set_title( GTK_WINDOW( okno ), "kajkujatoj" ); gtk_container_set_border_width( GTK_CONTAINER( okno ), 5 ); box1_0 = gtk_vbox_new( FALSE, 1 ); gtk_container_add( GTK_CONTAINER( okno ), box1_0 ); guzik = gtk_button_new_with_label( "cyfra" ); box1_1 = gtk_table_new( 2, 2, TRUE ); gtk_table_set_row_spacings( GTK_TABLE( box1_1 ), 2 ); gtk_table_set_col_spacings( GTK_TABLE( box1_1 ), 2 ); gtk_box_pack_start( GTK_BOX( box1_0 ), guzik, TRUE, TRUE, 0 ); przycisk[ 0 ] = gtk_button_new_with_label( "1" ); przycisk[ 1 ] = gtk_button_new_with_label( "2" ); przycisk[ 2 ] = gtk_button_new_with_label( "3" ); przycisk[ 3 ] = gtk_button_new_with_label( "4" ); gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 0 ], 0, 1, 0, 1 ); gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 1 ], 1, 2, 0, 1 ); gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 2 ], 0, 1, 1, 2 ); gtk_table_attach_defaults( GTK_TABLE( box1_1 ), przycisk[ 3 ], 1, 2, 1, 2 ); gtk_container_add( GTK_CONTAINER( box1_0 ), box1_1 ); g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL ); gtk_widget_show_all( okno ); gtk_main(); return 0; }
|
|
« 1 » |