2009-11-05 31 views
0

我有一個要求如下一樣,完全混淆了有關創建GTK + C插件

alt text

在此會有的用戶名列表與留在一行上有些狀態圖標... 當它收到點擊事件,我需要改變背景顏色,以可視化,它被選中...我嘗試了各種方式,但我不能把圖像和標籤放在一起,再加上我不知道如何改變標籤的背景顏色。 ..

這整個列表需要有滾動條,因爲可以有n個項目...

任何人都可以建議我該怎麼做... 哪些小部件可用於此... 可以指向一些教程示例。

謝謝。

回答

1

結合圖像和文字應該沒有問題;只需創建一個GtkImage和一個GtkLabel,將這兩個文件打包到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

只是愛你說明的方式...謝謝....我只是要嘗試它!...但我已經創建了這個屏幕使用格萊德和在我有一個vBox(有一個空的地方)我需要將這些東西(列表)添加到那個地方......所以我應該把GtkScrolledWindow添加到那個地方? – User7723337 2009-11-05 09:12:03

+0

@Pradeep:謝謝。我有...幾年的GTK +經驗,它有助於解決這些問題。 :)是的,從「外部」開始,添加一個GtkScrolledWindow。 – unwind 2009-11-05 09:15:10

+0

確定完成所有的基本事情,現在我已附加點擊事件列表中的每個按鈕..但我應該怎麼知道哪個按鈕被點擊? – User7723337 2009-11-05 10:40:54

1

只要使用現有的GtkTreeView(即使您的「樹」只有一個分支)。 Follow the tutorial瞭解如何創建標籤以及如何呈現標籤。

0

要獲取圖標和標籤,您可以使用包裝在GtkHBox中的GtkImageGtkLabel。爲了設置背景顏色,您必須將HBox放入GtkEventBox。標籤無法渲染它的背景,所以你必須把它們放在一個小部件中,在這種情況下,就是EventBox。然後您可以使用EventBox的gtk_widget_modify_bg功能設置背景。

隨着GtkEventBox + GtkHBox + GtkImage + GtkLabel你有你的物品。現在,把每個項目放在GtkVBox。要獲得滾動支持,您應該將VBox放入GtkScrolledWindow。使用gtk_scrolled_window_add_with_viewport函數添加它。如果您使用的是Glade,那麼您必須將GtkVbox放在GtkViewPort內,然後將GtkViewPort放入GtkScrolledWindow。ViewPort小部件完成了滾動所需的所有魔法。

然後,您可以更改所選項目的背景以捕獲「已單擊」信號。