Ten post został opublikowany 13 lat temu. Informacje mogą być przestarzałe, poglądy autora mogły ewoluować lub post może być nieaktualny w jakiś inny sposób. Weź to pod uwagę podczas czytania tego posta.
6. Podstawowe kontrolki
6.1. GtkCheckButton
W tym rozdziale dowiesz się nieco informacji o kilku widżetach, które można umieścić w oknie programu — jak je utworzyć oraz jak ich używać. Jednym z nich jest GtkCheckButton.
GtkCheckButton to pole zaznaczane. Przydaje się na przykład, gdy chcemy, by użytkownik wybrał, czy włączyć jakąś funkcję, czy nie. Można go utworzyć następującą funkcją:
Jedynym parametrem jest label, czyli etykieta. Można przechwycić zdarzenie kliknięcia GtkCheckButtona — zdarzenie to nazywa się clicked. Warto również wspomnieć, że istnieje bardzo podobna do GtkCheckButton kontrolka — jest nią GtkToggleButton. Wygląda jak normalny przycisk z tym, że po wciśnięciu go pozostaje w takim stanie. GtkCheckButton tak naprawdę dziedziczy GtkToggleButton i zmienia jedynie wygląd tak powstałego widżetu. GtkToggleButton tworzy się funkcją gtk_toggle_button_new_with_label(), która również przyjmuje jako argument etykietę.
Jak już napisałem, GtkCheckButton dziedziczy GtkToggleButton, tak więc nazwy wszystkich funkcji związanych z zaznaczanym polem zaczynają się od gtk_toggle_button. Do pobierania i ustawiania stanu przycisku służą dwie funkcje:
gtk_toggle_button_get_active() pobiera wskaźnik do przycisku i zwraca TRUE, jeśli przycisk jest wciśnięty i FALSE w przeciwnym wypadku. TRUE i FALSE to wartości typowe dla GTK+, możesz jednak używać wartości typowych dla C/C++ — true i false. Druga funkcja, gtk_toggle_button_set_active() w pierwszym argumencie pobiera referencję do przycisku, a w drugim żądaną wartość — TRUE, jeśli przycisk ma być wciśnięty oraz FALSE jeżeli nie.
Powyższy kod ma za zadanie utworzenie okna, poznanego już kontenera GtkVBox i umieszczeniu w nim dwóch kontrolek — GtkCheckButton oraz GtkToggleButton, które po zaznaczeniu zmieniają zmieniają etykietę na “Wciśnięto!” oraz na “Nie wciśnięto!” po odznaczeniu. Efekt tego kodu można zobaczyć poniżej.
6.2. GtkFrame
GtkFrame jest ramką, której można użyć, aby pogrupować widżety. Ma 4 różne style i są to: GTK_SHADOW_IN, GTK_SHADOW_OUT, GTK_SHADOW_ETCHED_IN i GTK_SHADOW_ETCHED_OUT. Tworzy się ją funkcją:
GtkWidget*gtk_frame_new(const gchar *label);
Należy jej przekazać żądany tytuł dla ramki. Aby ustawić styl GtkFrame należy posłużyć się funkcją:
W pierwszym parametrze przyjmuje ona wskaźnik do ramki, a w drugim jeden z wymienionych wyżej stylów. Poniższy kod źródłowy ma za zadanie utworzyć 4 ramki, każdą z innym stylem, aby zobrazować, jak każdy z nich wygląda.
Po skompilowaniu i uruchomieniu programu, zobaczysz coś takiego:
6.3. GtkLabel
GtkLabel pozwala tworzyć etykiety. I to nie byle jakie. Daje możliwość nie tylko wprowadzenia czystego tekstu, ale również sformatowanie go za pomocą języka znaczników w pewnym stopniu podobnego do HTML-a. Lista obsługiwanych znaczników znajduje się na stronie dokumentacji GTK+.
Poniższa funkcja tworzy nową etykietę:
GtkWidget*gtk_label_new(const gchar *str);
W argumencie należy przekazać żądany tekst. Aby jednak go sformatować, należy użyć funkcji:
W pierwszym argumencie należy przekazać referencję do widżetu, a w drugim — tekst napisany we wspomnianym języku znaczników — Pango Text Attribute Markup Language,
Efekt działania programu powstałego po skompilowaniu powyższego kodu jest następujący:
6.4. GtkComboBox
GtkComboBox to lista rozwijana. Może się przydać, gdy chcemy dać wybór użytkownikowi jednej z kilku opcji — np. wybór miesiąca w kalendarzu. Tworzy się go następującą funkcją:
GtkWidget*gtk_combo_box_text_new(void);
Tworzy ona jednak nie GtkComboBoxa, a GtkComboBoxText. Różni się on od GtkComboBoxa tym, że wszystkie jego elementy muszą być w postaci tekstu — GtkComboBox daje np. możliwość stworzenia drzewa.
Aby więc dodać element do GtkComboBoxText, należy posłużyć się funkcją:
Ostatnim z widżetów prezentowanych w tym rozdziale jest GtkEntry. Jest to pole tekstowe, do którego użytkownik może wpisywać jakieś dane. Tworzy się go funkcją:
GtkWidget*gtk_entry_new(void);
Poniższy kod źródłowy ma za zadanie utworzyć etykietę oraz pole tekstowe.