我正在寫一個custom widget using gtkmm,我還沒有能夠讓它在空地上工作。 (小部件本身幾乎沒有功能,它確實有效,並且我希望在繼續下一步之前讓它在空地中工作。)Glade發現了這個小部件,但是當我嘗試將它放置在一個窗口中時,glade崩潰。如何將自定義gtkmm小部件添加到glade中?
基於提示我在各種搜索發現,我加了這段代碼的主源文件:
extern "C"
{
GType date_chooser_get_type(void)
{
return DateChooser::get_type();
}
}
我有一個懷疑,上面的代碼是不正確的,但我不能找到關於這個函數應該做什麼的任何gtkmm或glade文檔。
基礎上catalog documentation for glade,我創建了以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<glade-catalog name="gtk-date-chooser" library="libgtkdatechooser-0.1.so" language="c++">
<glade-widget-classes>
<glade-widget-class name="DateChooser" generic-name="date-chooser" title="Date Chooser" />
</glade-widget-classes>
<glade-widget-group name="date" title="Date">
<glade-widget-class-ref name="DateChooser"/>
</glade-widget-group>
</glade-catalog>
這是我的小工具的源目錄的根目錄與名稱gtk-date-chooser.xml
。我在使用該目錄中運行的林間空地:
GLADE_CATALOG_SEARCH_PATH=. GLADE_MODULE_SEARCH_PATH=./.libs glade
當窗口出現時,如在目錄中指定,默認圖標我的小部件出現在一個特殊的「日期」組。如果我放置一個窗口,然後選擇要放置在窗口中的小部件,則空地崩潰。我在控制檯上看到如下:
GladeUI-Message: 2 missing displayable value for GtkWidget::events
GladeUI-Message: No displayable values for property GtkTreeSelection::mode
GladeUI-Message: 1 missing displayable value for GtkCellRendererAccel::accel-mode
GladeUI-Message: 14 missing displayable value for GtkCellRendererAccel::accel-mods
(glade:23757): GladeUI-CRITICAL **: gwa_list_signals: assertion `real_type != 0' failed
(glade:23757): GLib-GObject-WARNING **: cannot retrieve class for invalid (unclassed) type `<invalid>'
(glade:23757): GLib-GObject-CRITICAL **: g_object_class_list_properties: assertion `G_IS_OBJECT_CLASS (class)' failed
(glade:23757): GLib-GObject-WARNING **: cannot retrieve class for invalid (unclassed) type `<invalid>'
(glade:23757): Gtk-CRITICAL **: gtk_container_class_list_child_properties: assertion `GTK_IS_CONTAINER_CLASS (cclass)' failed
GladeUI-Message: Glade needs artwork; a default icon will be used for the following classes:
DateChooser needs an icon named 'widget-gtk-date-chooser-date-chooser'
**
GladeUI:ERROR:glade-signal-model.c:800:glade_signal_model_iter_n_children: code should not be reached
好像答案this (unanswered) question可能會提供線索,但我一直沒能找到這個問題的線索或將與我的問題,幫助任何回答。
版本我使用的是:
- Ubuntu的:12.04
- 的gtkmm:3.4.0-0ubuntu1
- 空地:3.12.0-0ubuntu1
(我會願意測試基於中繼版本或Centos 6或Fedora 16的解決方案。)
您的自定義小部件是一個Gtk :: DrawingArea(或可以像那樣實現)? – higuaro
我有同樣的問題。它似乎正在發生,因爲新類型沒有正確註冊。這又取決於在庫初始化函數中調用'Gtk :: Main :: init_gtkmm_internals()',這樣做可以防止glade正常啓動。儘管如此,還沒有弄清楚爲什麼。 – Tom
@ h3nr1x:不可以。看看上面鏈接的代碼 - 這非常簡單。 – bstpierre