我有如下要求,
在这里会有一行用户名列表,其中一行左侧有一些状态图标... 当它收到点击事件时我需要更改背景颜色以显示它被选中...我尝试了各种方式,但我不能把图像和标签放在一起加上我不知道如何更改标签的背景颜色..
这整个列表需要有滚动条,因为可以有n个项目......
谁能建议我怎么做...... 哪个小部件用于此... 可以指出一些教程示例。
感谢。
答案 0 :(得分:1)
组合图像和文本应该没问题;只需创建GtkImage和GtkLabel,将其打包到GtkHBox中,然后将其添加到按钮中。在GTK +中,buttons是容器,可以包含任何小部件组合。调整packing parameters到图像很小,标签获取剩余空间。
背景闪烁更难; GtkLabels不渲染背景,因此它们不会影响该区域的颜色。您可以轻松地快速闪烁前景色(例如,在标签文本中使用内联HTML),您可能希望从此开始,然后在您学习了更多GTK +后重新访问该问题。
将每个完成的按钮填入GtkVBox,并将其放在GtkScrolledWindow中以获得滚动显示。
更新:要了解点击了哪个按钮,您需要为“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));
上面的代码构建了一个简单的标记按钮,你的代码显然会更复杂,但这不会改变信号处理程序的附加方式。
答案 1 :(得分:1)
只需使用现有的GtkTreeView(即使您的“树”只有一个分支)。 Follow the tutorial了解如何创建标签以及如何渲染它们。
答案 2 :(得分:1)
有关GtkTreeView的非常好的教程/介绍,请查看GTK+ 2.0 Tree View Tutorial。
答案 3 :(得分:0)
要获取图标和标签,您可以使用GtkImage中打包的GtkLabel和GtkHBox。要设置背景颜色,必须将HBox放在GtkEventBox内。标签无法呈现其背景,因此您必须将它们放在能够实现此功能的窗口小部件中,在本例中为EventBox。然后,您可以使用EventBox的gtk_widget_modify_bg
函数设置背景。
使用GtkEventBox + GtkHBox + GtkImage + GtkLabel,你有你的项目。现在,将每个项目放在GtkVBox中。要获得滚动支持,您应该将您的VBox放在GtkScrolledWindow中。使用gtk_scrolled_window_add_with_viewport
功能添加它。如果您正在使用Glade,那么您必须将GtkVbox放在GtkViewPort内,然后放入GtkScrolledWindow中的GtkViewPort。 ViewPort小部件可以完成滚动所需的所有魔术。
然后,您可以更改所选项目的背景,捕捉“点击”信号。