dejmien Temat założony przez niniejszego użytkownika |
GTK, problem z wczytaniem tekstu ze zmiennej. » 2013-12-26 13:00:45 Witam. Mam pewien problem z GTK. Mianowicie chcę zrobić taki myk że w Gtktekstview użytkownik wpisze jakiś tekst, ten tekst zostanie zapisany do bufora i gdy użytkownik zamknie okno to zostanie wyświetlone nowe okno z Gtktekstview, które pokaże ten sam tekst, który wpisał użytkownik do poprzedniego okna. Wszystko w celach testowych chcę sprawdzić czy działa pobieranie tekstu, ale najwidoczniej coś robię źle... ok zamieszczam kod pierwszej funkcji, której zadaniem jest pobrać tekst od użytkownika. void tekst( int argc, char * argv[] ) { GtkWidget * okno; GtkWidget * textView; GtkTextBuffer * bufor; GtkTextIter iter; GtkTextIter its; GtkTextIter itk; 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, 200 ); gtk_window_set_title( GTK_WINDOW( okno ), "Szyfrowanie" ); gtk_container_set_border_width( GTK_CONTAINER( okno ), 10 ); textView = gtk_text_view_new(); bufor = gtk_text_view_get_buffer( GTK_TEXT_VIEW( textView ) ); gtk_text_buffer_get_iter_at_offset( bufor, & iter, 0 ); gtk_text_buffer_get_end_iter( bufor, & itk ); gtk_text_buffer_get_start_iter( bufor, & its ); gtk_container_add( GTK_CONTAINER( okno ), textView ); tkst = gtk_text_buffer_get_text( bufor, & its, & itk, FALSE ); g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( tekst2 ), NULL ); gtk_widget_show_all( okno ); }
Chcę tutaj dodać że static gchar * tkst; jest użyta jako globalna. Tutaj znajdue się funkcja, któa zostaje wyświetlona po zamknięciu pierwszego okna i któa ma wyświetlić ten tekst: void tekst2( int argc, char * argv[] ) { GtkWidget * okno; GtkWidget * textView; GtkTextBuffer * bufor; GtkTextIter iter; 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, 200 ); gtk_window_set_title( GTK_WINDOW( okno ), "Szyfrowanie" ); gtk_container_set_border_width( GTK_CONTAINER( okno ), 10 ); textView = gtk_text_view_new(); bufor = gtk_text_view_get_buffer( GTK_TEXT_VIEW( textView ) ); gtk_text_buffer_get_iter_at_offset( bufor, & iter, 0 ); gtk_text_buffer_insert( bufor, & iter, tkst, - 1 ); gtk_widget_show_all( okno ); }
|
|
MrPoxipol |
» 2013-12-26 14:05:00 Chcesz przypisać tekst do adresu? Dokumentacja |
---|
strcpy | Kopiuje łańcuch znaków do tablicy znaków. (funkcja) |
---|
|
|
dejmien Temat założony przez niniejszego użytkownika |
» 2013-12-26 14:44:13 No, ale czy od wyciągnięcia tekstu z bufora nie służy funkcja ,,gtk_text_buffer_get_text''?
|
|
MrPoxipol |
» 2013-12-26 15:25:04 Służy. Ale zwraca ten coś..Skorzystaj z dokumentacji to zobaczysz.. |
|
dejmien Temat założony przez niniejszego użytkownika |
» 2013-12-26 20:12:32 Nie działa mi to... wyświetla się puste okienko... Nie wiem jak to ma dokładnie wyglądać, ale robię tak że przy pomocy ,,gtk_text_buffer_get_text'' wyciągam tekst z bufora a następnie przy pomocy tej funkcji co ty mi podałeś kopiuje łańcuch znaków do tablicy znaków... |
|
czosnek17 |
» 2013-12-26 21:16:54 Po co do tych funkcja dajesz argc i argv? No na razie to działa tak: tworzysz okno, wczytujesz pustą zawartość z textView i ustawiasz zdarzenie przejścia do następnej funkcji jeżeli okno zostanie zamknięte. Nowe okno jest puste, bo nie dodajesz textViewa do kontenera. Tak jak już pisałem w textViewie nie wyświetli się tekst z poprzedniego okna, bo go nie pobierasz (tylko raz na początku programu, gdy textView jest pusty) więc przed zamknięciem okna musisz to zrobić i wypisać go do nowego okna. g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( tekst2 ), NULL );
Jak myślisz, od czego jest ostatni argument? :) |
|
dejmien Temat założony przez niniejszego użytkownika |
» 2013-12-26 21:47:56 Faktycznie nie zauważyłem że zapomniałem umieścić Gtktekstwiev w kontenerze. Nie mam pojęcia od czego jest ostatni argument :-) A argc i argv w funkcji używam bo gdzieś czytałem żeby używać tych argumentów bo są konieczne... No tak wyświetlam puste okno bo chcę pobrać tekst ten który wpisze użytkownik do okna. tkst = gtk_text_buffer_get_text( bufor, & its, & itk, FALSE );
Ale przecież pobieram ten tekst przed zamknięciem okna.. o to CI chodzi tak?? |
|
czosnek17 |
» 2013-12-26 22:09:49 Nie mam pojęcia od czego jest ostatni argument :-) A argc i argv w funkcji używam bo gdzieś czytałem żeby używać tych argumentów bo są konieczne... |
Używasz w funkcji, czy tylko je przekazujesz? Ja trochę pisałem w GTK i jedyne miejsce, gdzie ich używam to gtk_init( & argc, & argv ); w funkcji main. Poza tym tutaj te argumenty tracą prawidłową wartość, a raczej w funkcjach nie są tym co myślisz. Pierwszy argument to kontrolka dla której jest odbierane zdarzenie, a drugi to NULL (w tym przypadku). Nie mam pojęcia od czego jest ostatni argument :-) A argc i argv w funkcji używam bo gdzieś czytałem żeby używać tych argumentów bo są konieczne... |
W ostatnim argumencie możesz przesłać cokolwiek do funkcji, która będzie uruchomiona po wykryciu zdarzenia. Czyli możesz przesłać swój texView i w tekst2() odczytać jego zawartość i zapisać ją do nowego textViewa. Pamiętaj, że ostatni argument podany przy g_signal_conect() odbierasz w funkcji jako drugi. Ale przecież pobieram ten tekst przed zamknięciem okna.. o to CI chodzi tak??
|
Nie pobierasz przed zamknięciem okna, ale przed ustawianiem zdarzenia zamknięcia okna. Polecam jeszcze poczytać kurs. Podsumowując musisz przekazać textView do tekst2() i tam pobrać z niego tekst. Np g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( tekst2 ), textView );
void tekst2( aaa bbb, GtkWidget * textView2 )
Masz włączoną konsolę w projekcie? Jeżeli nie to włącz, będziesz mógł sprawdzać jak działa program (cout), a GTK czasem wypisuje błędy do konsoli. |
|
« 1 » 2 |