2009-11-05 2 views
0

У меня есть требование, как следует,Полностью запутать о создании виджета GTK + C

alt text

в этом будет список имен пользователей с некоторыми пиктограммами состояния там осталось в одном ряду ... , когда он получает событие с щелчком, мне нужно изменить цвет фона, чтобы визуализировать, что он выбран ... Я старался изо всех сил, но я не могу поместить изображение и ярлык вместе, и я не знаю, как изменить цвет фона метки. ..

Весь этот список должен иметь полосы прокрутки, так как может быть n номеров элементов ...

может кто-нибудь предложить мне, как это сделать ... какие виджеты использовать для этого ... может быть несколько примеров для учебных примеров.

Спасибо.

ответ

1

Сочетание изображения и текста не должно быть проблемой; просто создайте GtkImage и установите GtkHBox и добавьте это к кнопке. В GTK +, buttons являются контейнерами и могут содержать любую комбинацию виджетов. Отрегулируйте packing parameters, чтобы изображение было маленьким, а ярлык получает оставшееся пространство.

Мигание фона сложнее; GtkLabels не отображают их фон, поэтому они не могут влиять на цвет этой области. Возможно, вы, возможно, достаточно быстро запустили цвет переднего плана (например, используя встроенный HTML в тексте ярлыка), вы можете начать с этого, а затем пересмотреть проблему, как только узнаете больше о GTK +.

Настройте каждую законченную кнопку на GtkVBox и поместите ее в GtkScrolledWindow, чтобы получить прокрутку.

UPDATE: Для того, чтобы узнать, какая кнопка получает щелкнул, вам необходимо подключить обработчик сигнала «clicked»:

static void cb_button_clicked(GtkButton *button, gpointer user) 
{ 
    printf("Whaddaya know, button number %d was clicked!\n", GPOINTER_TO_INT(user)); 
} 

... elsewhere, when building the button ... 

GtkWidget *btn; 
btn = gtk_button_new_with_label("My fancy button"); 
g_signal_connect(G_OBJECT(btn), "clicked", G_CALLBACK(cb_button_clicked), GINT_TO_POINTER(42)); 

Приведенный выше код создает простую меченого кнопку, ваш код будет явно но это не меняет способ привязки обработчика сигнала.

+0

Просто любите так, как вы объяснили ... спасибо .... я просто попробую! .. но я создал этот экран с помощью Glade и в том, что у меня есть один vBox (с одним пустым местом) Мне нужно добавить весь этот материал (список) в это место ... так что я должен добавить GtkScrolledWindow в это место? – User7723337

+0

@Pradeep: Спасибо. У меня есть ... несколько лет опыта GTK +, он помогает в таких вопросах. :) И да, начните с «снаружи», добавив GtkScrolledWindow. – unwind

+0

ok Выполнено со всеми основными вещами, теперь у меня есть прикрепленное событие click для каждой кнопки в списке .. но как мне узнать, какая кнопка нажата? – User7723337

1

Просто используйте существующий GtkTreeView (даже если ваше «дерево» имеет только одну ветвь). Follow the tutorial, чтобы узнать, как создавать ярлыки и как их отображать.

0

Чтобы получить значок и ярлык, вы можете использовать GtkImage и GtkLabel, упакованные в GtkHBox. Чтобы установить цвет фона, вы должны поместить HBox внутри GtkEventBox. Ярлыки не могут отображать свой фон, поэтому вам нужно поместить их в виджет, способный на это, в данном случае, на EventBox. Затем вы можете установить фон с помощью функции gtk_widget_modify_bg EventBox.

С GtkEventBox + GtkHBox + GtkImage + GtkLabel у вас есть свой товар. Теперь поставьте все предметы в GtkVBox. Чтобы получить поддержку прокрутки, вы должны поместить свой VBox в GtkScrolledWindow. Добавьте его с помощью функции gtk_scrolled_window_add_with_viewport. Если вы используете Glade, вам нужно будет установить GtkVbox внутри GtkViewPort, а затем GtkViewPort внутри GtkScrolledWindow.Виджет ViewPort выполняет всю магию, необходимую для прокрутки.

Затем вы можете изменить фон выбранного элемента, поймав сигнал «щелкнув».

Смежные вопросы