Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[GTK+] Ustawianie tekstu w ramce

Ostatnio zmodyfikowano 2012-08-19 16:48
Autor Wiadomość
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:
C/C++
#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 ); //   tu błąd
   
    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;
}
P-62772
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(). :)
P-62824
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ć?
P-62870
m4tx
» 2012-08-18 18:01:33
Daj SSCCE, bo w kodzie, który podałeś nie ma nic o Twoim problemie.
P-62872
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:
C/C++
#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 ); //   tu błąd
    ////
    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.
P-62884
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ę :P
To 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...).

C/C++
GTK_FRAME( sss->ramka );

gtk_frame_set_label_align( sss->ramka, 35, 20 );
Zamień na:
C/C++
gtk_frame_set_label_align( GTK_FRAME( sss->ramka ), 35, 20 );

Powinno działać :)
P-62887
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 :(
P-62892
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?
P-62976
« 1 » 2
  Strona 1 z 2 Następna strona