Создайте кнопку Gtk с фоновым изображением и надписью перед ним - PullRequest
0 голосов
/ 02 августа 2011

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

Любые предложения будут с благодарностью.

Спасибо, Пол

Ответы [ 2 ]

0 голосов
/ 09 февраля 2014

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

   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 Вы можете делать все, что угодно, например, изменять шрифт с помощью, менять отступы надписи на кнопках и так далее: -)

0 голосов
/ 03 августа 2011

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

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

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

...