Создайте кнопку Gtk с фоновым изображением и меткой перед ним.

Хорошо, я пытаюсь создать кнопку Gtk на C++ (gtkmm 3.0), у которой есть фоновое изображение, которое я могу изменить в зависимости от состояния, и метка на переднем плане, которую я могу изменить в зависимости от языковой строки. Я попытался расширить класс Gtk::EventBox, который отлично подходит для изображения, но я не могу поместить в него метку. Я попытался расширить класс Gtk::Container, но не могу поместить его в свой Gtk::VButtonBox. Должен быть лучший способ сделать это, не изобретая велосипед.

Любые предложения будут ценны.

Спасибо, Пол.


person paullj1    schedule 02.08.2011    source источник


Ответы (2)


На самом деле вам нужно будет изобрести колесо. Что вам нужно, так это композиция из двух виджетов. Я знаю, что нечто подобное реализовано в Gedit, Nautilus, а новый Gtk+ 3.1.X включает виджет, который делает что-то подобное, под названием GtkOverlay.

  • GtkOverlay – это новый контейнер, который позволяет размещать один или несколько виджетов
    "наложения" поверх другого виджета. Это можно использовать для «плавающих статусбаров» и подобных интерфейсов.

Это взято из здесь. У вас есть два варианта: вы ждете, пока он выйдет, или копируете код и адаптируете его к своему приложению, пока не будет выпущен новый Gtk+.

person erick2red    schedule 03.08.2011
comment
Спасибо, в итоге я расширил Gtk::Layout и установил изображение на фон, а затем поместил метку сверху. - person paullj1; 17.08.2011

Это должно работать:

   GtkCssProvider* my_css_provider =  gtk_css_provider_new();
    gtk_css_provider_load_from_data(my_css_provider,"GtkWidget { background:url(yourimage.jpg); }",-1,NULL); 
    GtkStyleContext* context = gtk_widget_get_style_context(yourbutton);
    gtk_style_context_add_provider (context, GTK_STYLE_PROVIDER (my_css_provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

Я протестировал его с фоном: # F00, который превратил кнопку в приятный красный цвет, поэтому он также должен работать с изображениями, просто придерживайтесь стандартов CSS. Вы можете сделать практически все, например, изменить шрифт, изменить отступ метки кнопки и так далее :-)

person Kenobi    schedule 09.02.2014