czosnek17 Temat założony przez niniejszego użytkownika |
[GTK+] Ustawianie tekstu w ramce » 2012-08-17 21:55:42 Mam w ramce tekst, ale gdy próbuję go przenieść np funkcją gtk_frame_set_label_align (GtkFrame *frame,gfloat xalign,gfloat yalign) to wyskakują błędy: cannot convert 'GtkWidget*' to 'GtkFrame*' for argument '1' to void gtk_frame_set_label_align(GtkFrame*, gfloat, gfloat) Próbowałem porobić inne rzeczy z tą ramką takie jak zmiana stylu i był dokładnie taki sam błąd. Przykładowy kod: #include <gtk/gtk.h> using namespace std;
struct struktura { GtkWidget * sokno; GtkWidget * svbox; GtkWidget * start; GtkWidget * fixed; GtkWidget * ramka; GtkWidget * wynik; };
void rysujmenu( GtkWidget * przycisk, gpointer dane ) { struct struktura * sss; sss =( struct struktura * ) dane; sss->svbox = gtk_vbox_new( FALSE, 1 ); gtk_container_add( GTK_CONTAINER( sss->sokno ), sss->svbox ); gtk_box_pack_start( GTK_BOX( sss->svbox ), sss->start, TRUE, TRUE, 2 ); gtk_widget_show_all( sss->svbox ); }
void funkcja( GtkWidget * widget, gpointer dane ) { struct struktura * sss; sss =( struct struktura * ) dane; char * txt3 = "tekst"; gtk_widget_destroy( sss->start ); gtk_widget_destroy( sss->svbox ); sss->fixed = gtk_fixed_new(); gtk_container_add( GTK_CONTAINER( sss->sokno ), sss->fixed ); sss->ramka = gtk_frame_new( "ramka" ); gtk_frame_set_shadow_type( GTK_FRAME( sss->ramka ), GTK_SHADOW_ETCHED_OUT ); gtk_container_add( GTK_CONTAINER( sss->fixed ), sss->ramka ); gtk_fixed_put( GTK_FIXED( sss->fixed ), sss->ramka, 0, 65 ); gtk_widget_set_size_request( sss->ramka, 230, 130 ); sss->wynik = gtk_label_new( txt3 ); gtk_container_add( GTK_CONTAINER( sss->ramka ), sss->wynik ); gtk_frame_set_label_align( sss->ramka, 35, 20 ); gtk_widget_show_all( sss->fixed ); }
int main( int argc, char * argv[] ) { struct struktura sss; GtkWidget * pstart; gtk_init( & argc, & argv ); sss.sokno = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_window_set_position( GTK_WINDOW( sss.sokno ), GTK_WIN_POS_CENTER ); gtk_window_set_default_size( GTK_WINDOW( sss.sokno ), 250, 250 ); gtk_window_set_title( GTK_WINDOW( sss.sokno ), "" ); gtk_container_set_border_width( GTK_CONTAINER( sss.sokno ), 5 ); pstart = gtk_button_new_with_label( "Start" ); sss.start = pstart; rysujmenu( NULL, & sss ); g_signal_connect( G_OBJECT( sss.start ), "clicked", G_CALLBACK( funkcja ), & sss ); g_signal_connect( G_OBJECT( sss.sokno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL ); gtk_widget_show_all( sss.sokno ); gtk_main(); return 0; }
|
|
m4tx |
» 2012-08-18 07:45:41 Jak chcesz przekazać do funkcji GtkFrame, a masz GtkWidget, to musisz tego GtkWidget przekonwertować do GtkFrame za pomocą makra GTK_FRAME(). :) |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2012-08-18 17:57:40 Daje GTK_FRAME( sss->ramka ); i dalej jest ten sam błąd. Jak mam to zrobić? |
|
m4tx |
» 2012-08-18 18:01:33 Daj SSCCE, bo w kodzie, który podałeś nie ma nic o Twoim problemie. |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2012-08-18 18:33:52 Co to jest? o_O Co mam dać? Sory, ale czytając angielskie strony czuję się jak dziecko w mgle. bo w kodzie, który podałeś nie ma nic o Twoim problemie. |
No ten program wywala błąd: #include <gtk/gtk.h> using namespace std;
struct struktura { GtkWidget * sokno; GtkWidget * svbox; GtkWidget * start; GtkWidget * fixed; GtkWidget * ramka; GtkWidget * wynik; };
void rysujmenu( GtkWidget * przycisk, gpointer dane ) { struct struktura * sss; sss =( struct struktura * ) dane; sss->svbox = gtk_vbox_new( FALSE, 1 ); gtk_container_add( GTK_CONTAINER( sss->sokno ), sss->svbox ); gtk_box_pack_start( GTK_BOX( sss->svbox ), sss->start, TRUE, TRUE, 2 ); gtk_widget_show_all( sss->svbox ); }
void funkcja( GtkWidget * widget, gpointer dane ) { struct struktura * sss; sss =( struct struktura * ) dane; char * txt3 = "tekst"; gtk_widget_destroy( sss->start ); gtk_widget_destroy( sss->svbox ); sss->fixed = gtk_fixed_new(); gtk_container_add( GTK_CONTAINER( sss->sokno ), sss->fixed ); sss->ramka = gtk_frame_new( "ramka" ); gtk_frame_set_shadow_type( GTK_FRAME( sss->ramka ), GTK_SHADOW_ETCHED_OUT ); gtk_container_add( GTK_CONTAINER( sss->fixed ), sss->ramka ); gtk_fixed_put( GTK_FIXED( sss->fixed ), sss->ramka, 0, 65 ); gtk_widget_set_size_request( sss->ramka, 230, 130 ); sss->wynik = gtk_label_new( txt3 ); gtk_container_add( GTK_CONTAINER( sss->ramka ), sss->wynik ); GTK_FRAME( sss->ramka ); gtk_frame_set_label_align( sss->ramka, 35, 20 ); gtk_widget_show_all( sss->fixed ); }
int main( int argc, char * argv[] ) { struct struktura sss; GtkWidget * pstart; gtk_init( & argc, & argv ); sss.sokno = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_window_set_position( GTK_WINDOW( sss.sokno ), GTK_WIN_POS_CENTER ); gtk_window_set_default_size( GTK_WINDOW( sss.sokno ), 250, 250 ); gtk_window_set_title( GTK_WINDOW( sss.sokno ), "" ); gtk_container_set_border_width( GTK_CONTAINER( sss.sokno ), 5 ); pstart = gtk_button_new_with_label( "Start" ); sss.start = pstart; rysujmenu( NULL, & sss ); g_signal_connect( G_OBJECT( sss.start ), "clicked", G_CALLBACK( funkcja ), & sss ); g_signal_connect( G_OBJECT( sss.sokno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL ); gtk_widget_show_all( sss.sokno ); gtk_main(); return 0; }
cannot convert 'GtkWidget*' to 'GtkFrame*' for argument '1' to 'void gtk_frame_set_label_align(GtkFrame*, gfloat, gfloat)'|
Chwila chyba ogarniam.. Jeżeli tak, to ten kod to jest SSCCE, nie wstawiałem całego programu, tylko to, co ma zobrazować problem. |
|
m4tx |
» 2012-08-18 18:40:27 Tylko że w pierwszym poście pisałeś, że korzystasz z funkcji gtk_frame_set_label_align() , a ja nigdzie jej w Twoim kodzie nie widzę :PTo wyżej to głupoty... Nie zauważyłem scrollbara :P Ogólnie SSCCE to jest krótki kawałek kodu, który da się skompilować, który obrazuje problem, i który pozbawiony jest wszystkiego, co zbędne (czyli jakichś nieprzydatnych komentarzy, kodu niezwiązanego z problemem itd...). GTK_FRAME( sss->ramka );
gtk_frame_set_label_align( sss->ramka, 35, 20 ); Zamień na: gtk_frame_set_label_align( GTK_FRAME( sss->ramka ), 35, 20 );
Powinno działać :) |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2012-08-18 18:50:00 O nie.. działa, ale nie o to chodziło. Chciałem przemieszczać tekst w ramce, a nie jej nazwę... No ale i tak się to przyda :P
Więc jak mogę zmienić położenie tekstu w ramce? W dokumentacji pod gtk_frame... nic nie znalazłem :( |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2012-08-19 16:47:13 Już sobie poradziłem. Wystarczyło utworzyć kontener fixed w ramce. Jeszcze małe pytanie: Jak myślicie, programy w gtk łatwiej jest pisać obiektowo czy normalnie? |
|
« 1 » 2 |