m4tx |
» 2012-06-23 07:32:17 Gtk jednak nie jest takie proste jak mi się wydawało... |
Jest proste, tylko Ty chyba C++ nie znasz... :) W ogóle opisałeś tak ten swój problem, że w ogóle nie da się Ciebie zrozumieć. Możesz jakoś jaśniej? Da się w gtk wprowadzić tekst enterem? |
Co? |
|
Drraven |
» 2012-06-23 08:18:01 / n - nowa linia / t - tabulator |
|
jankowalski25 |
» 2012-06-23 10:11:10 @Drraven Nie "/" tylko chyba "\". |
|
Drraven |
» 2012-06-23 12:32:41 Coś mi nie chciało tego backslasha wyświetlić |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2012-06-23 14:44:52 Gtk jednak nie jest takie proste jak mi się wydawało... | Jest proste, tylko Ty chyba C++ nie znasz... :) |
Jak by było proste to mój program by działał ;p Da się w gtk wprowadzić tekst enterem? | Co? |
No chodzi o to, że jak wpiszę tekst, to żebym nie musiał kliknąć na przycisk żeby go wczytać, tylko enter. Tak jak masz w Firefoxie w prawym górnym rogu pasek do szukania w Google to chyba nie klikasz na lupę jak chcesz coś wyszukać tylko enter. W ogóle opisałeś tak ten swój problem, że w ogóle nie da się Ciebie zrozumieć. Możesz jakoś jaśniej? |
Program ma działać tak: 1. Wpisuję jedną z 2 nazw samochodu. 2. Klikam przycisk. 3. Wyświetla się samochód, którego nazwę wpisałem. Nie otwiera się nowe okno. 4. Jeżeli nie ma takiej nazwy nic się nie dzieje. Program działa tak: Wpisuję nazwę klikam i nic się nie dzieje. Obrazek się nie wyświetal, więc próbuję go wczytać na 2 sposoby. Oba sposoby nie działają, jeden daje warning. warning: 'lamb' may be used uninitialized in this function warning: 'maluch' may be used uninitialized in this function
Kod: #include<gtk/gtk.h> #include<string>
using namespace std;
struct _wieledanych { GtkWidget * etykieta; GtkWidget * label; GtkWidget * maluch; GtkWidget * lamb; GtkWidget * okno; };
void dalej( GtkButton * przycisk, gpointer * dane ) { string lamborg = "lamborghini"; string malucht = "maluch"; GtkWidget * kontener2; GtkWidget * okno; GtkWidget * etykieta; GtkWidget * lamb; GtkWidget * maluch; const gchar * tekst; string txt; struct _wieledanych * noweDane; noweDane =( struct _wieledanych * ) dane; tekst = gtk_entry_get_text( GTK_ENTRY( noweDane->etykieta ) ); txt = tekst; if( txt == "lamborghini" || txt == "maluch" ) { if( txt == "lamborghini" ) { lamb = gtk_image_new_from_file( "lamb.gif" ); gtk_container_add( GTK_CONTAINER( okno ), lamb ); } if( txt == "maluch" ) { maluch = gtk_image_new_from_file( "obraz.gif" ); gtk_container_add( GTK_CONTAINER( okno ), maluch ); } } else { etykieta = gtk_label_new( tekst ); gtk_container_add( GTK_CONTAINER( kontener2 ), etykieta ); } }
int main( int argc, char * argv[] ) { GtkWidget * okno; GtkWidget * ptxt; GtkWidget * napis; GtkWidget * kontener; GtkWidget * linia; GtkWidget * napis2; GtkWidget * przycisk; GtkWidget * lam; GtkWidget * mal; struct _wieledanych wieleDanych; gtk_init( & argc, & argv ); okno = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_window_set_title( GTK_WINDOW( okno ), "Kurs GTK+" ); gtk_window_set_position( GTK_WINDOW( okno ), GTK_WIN_POS_CENTER ); gtk_window_set_default_size( GTK_WINDOW( okno ), 300, 150 ); gtk_window_set_default_size( GTK_WINDOW( okno ), 300, 200 ); przycisk = gtk_button_new_with_label( "dalej" ); gtk_widget_set_size_request( przycisk, 10, 20 ); kontener = gtk_vbox_new( FALSE, 1 ); gtk_container_add( GTK_CONTAINER( okno ), kontener ); napis2 = gtk_label_new( " ~samochód~ " ); lam = gtk_image_new_from_file( "lamb.gif" ); mal = gtk_image_new_from_file( "obraz.gif" ); gtk_container_add( GTK_CONTAINER( kontener ), napis2 ); linia = gtk_hseparator_new(); gtk_box_pack_start( GTK_BOX( kontener ), linia, FALSE, TRUE, 17 ); napis = gtk_label_new( NULL ); gtk_container_add( GTK_CONTAINER( kontener ), napis ); ptxt = gtk_entry_new(); gtk_container_add( GTK_CONTAINER( kontener ), ptxt ); gtk_box_pack_start( GTK_BOX( kontener ), przycisk, FALSE, FALSE, 0 ); wieleDanych.etykieta = ptxt; wieleDanych.label = napis2; wieleDanych.lamb = lam; wieleDanych.maluch = mal; g_signal_connect( przycisk, "clicked", G_CALLBACK( dalej ), & wieleDanych ); g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL ); gtk_widget_show_all( okno ); gtk_main(); return 0; }
|
|
Badman |
» 2012-06-24 12:13:34 Ehh, Gtk+ jest stosunkowo proste, spróbuj swoich sił z WinAPI, to szybko powrócisz do Gtk+ :) Nie dysponuje w tej chwili żadnym kompilatorem, ale wizualnie to mogę stwierdzić: 1. Nie zostaje wczytany plik graficzny, przyczyny: a) pliki pobierane są z katalogu , z którego został uruchomiony program, a faktycznie znajdują się w innym. Spróbuj podać pełną ścieżkę do pliku z grafiką. b) wersja biblioteki, którą używasz nie została skompilowana ze wsparciem dla formatu GIF, spróbuj wczytać jakiś plik w PNG. W obu przypadkach możesz zadeklarować zmienne z przypisaniem do NULL i sprawdzić czy są różne od NULL po wczytaniu. Jeżeli są różne oznacza to, że grafika została wczytana. [...] GtkWidget * lamb = NULL; GtkWidget * maluch = NULL; [...] lamb = gtk_image_new_from_file( "lamb.gif" );
if( lamb == NULL ) { } else { }
2. W funkcji dalej dodajesz obraz do okna, lecz nie widzę abyś tworzył nowe okno, lub dodawał obraz do poprzedniego okna. Codzi o to: gtk_container_add( GTK_CONTAINER( okno ), lamb ); Wskaźnik okno wskazuję na jakiś przypadkowy adres w pamięci, więc przy założeniu że grafika została prawidłowo wczytana to nie ma prawa się pojawić. Co do reakcji GtkEntry na klawisz enter, to skojarz sygnał activate: g_signal_connect( ptxt, "activate", G_CALLBACK( dalej ), & wieleDanych );
|
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2012-06-26 18:32:35 Obrazki udaje się wczytać. Dodałem okno do struktury i program się nie kompiluje. Są 2 błędy: expected primary-expression before '.' token #include<gtk/gtk.h> #include<string>
using namespace std;
struct wieledanych { GtkWidget * etykieta; GtkWidget * label; GtkWidget * maluch; GtkWidget * lamb; GtkWidget * oknox; };
void dalej( GtkButton * przycisk, gpointer * dane ) { string lamborg = "lamborghini"; string malucht = "maluch"; GtkWidget * lamb = NULL; GtkWidget * maluch = NULL; const gchar * wcz = "wczytany"; const gchar * niewcz = "niewczytany"; GtkWidget * kontener2; GtkWidget * etykieta; GtkWidget * oknox; const gchar * tekst = "nowa etykieta"; string txt; struct wieledanych * noweDane; GtkWidget * etykieta3; const gchar * txt3; etykieta = gtk_label_new( NULL ); noweDane =( struct wieledanych * ) dane; etykieta = gtk_label_new( tekst ); gtk_container_add( GTK_CONTAINER( kontener2 ), etykieta ); tekst = gtk_entry_get_text( GTK_ENTRY( etykieta ) ); txt = tekst; if( txt == "lamborghini" || txt == "maluch" ) { if( txt == "lamborghini" ) { gtk_container_add( GTK_CONTAINER( wieledanych.oknox ), lamb ); } if( txt == "maluch" ) { gtk_container_add( GTK_CONTAINER( wieledanych.oknox ), maluch ); } } }
int main( int argc, char * argv[] ) { GtkWidget * ptxt; GtkWidget * napis; GtkWidget * kontener; GtkWidget * linia; GtkWidget * napis2; GtkWidget * przycisk; GtkWidget * lam; GtkWidget * mal; GtkWidget * lamb; GtkWidget * maluch; GtkWidget * okno; const gchar * tekstt = "TAK."; const gchar * tekstt2 = "NIE."; struct wieledanych wieleDanych; gtk_init( & argc, & argv ); okno = gtk_window_new( GTK_WINDOW_TOPLEVEL ); gtk_window_set_title( GTK_WINDOW( okno ), "Kurs GTK+" ); gtk_window_set_position( GTK_WINDOW( okno ), GTK_WIN_POS_CENTER ); gtk_window_set_default_size( GTK_WINDOW( okno ), 300, 150 ); gtk_window_set_default_size( GTK_WINDOW( okno ), 300, 200 ); przycisk = gtk_button_new_with_label( "dalej" ); gtk_widget_set_size_request( przycisk, 10, 20 ); lamb = gtk_image_new_from_file( "lamb.png" ); maluch = gtk_image_new_from_file( "obraz.png" ); kontener = gtk_vbox_new( FALSE, 1 ); gtk_container_add( GTK_CONTAINER( okno ), kontener ); napis2 = gtk_label_new( " ~samochód~ " ); lamb = gtk_image_new_from_file( "lamb.png" ); maluch = gtk_image_new_from_file( "obraz.png" ); if( lamb == NULL ) { gtk_label_set_text( GTK_LABEL( napis2 ), tekstt2 ); } else { gtk_label_set_text( GTK_LABEL( napis2 ), tekstt ); } gtk_container_add( GTK_CONTAINER( kontener ), napis2 ); linia = gtk_hseparator_new(); gtk_box_pack_start( GTK_BOX( kontener ), linia, FALSE, TRUE, 17 ); napis = gtk_label_new( NULL ); gtk_container_add( GTK_CONTAINER( kontener ), napis ); ptxt = gtk_entry_new(); gtk_container_add( GTK_CONTAINER( kontener ), ptxt ); gtk_box_pack_start( GTK_BOX( kontener ), przycisk, FALSE, FALSE, 0 ); wieleDanych.etykieta = ptxt; wieleDanych.label = napis2; wieleDanych.lamb = lam; wieleDanych.maluch = mal; wieleDanych.oknox = okno; g_signal_connect( przycisk, "clicked", G_CALLBACK( dalej ), & wieleDanych ); g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL ); gtk_widget_show_all( okno ); gtk_main(); return 0; }
|
|
m4tx |
» 2012-06-26 19:00:16 struct wieledanych * noweDane; |
Jesteś pewien? :) A co do błędów - może powiesz, w których linijkach występują? :) |
|
1 2 « 3 » 4 5 |