为了使用Glib :: wrap,必须使用Glib :: init()?

时间:2010-07-13 02:14:25

标签: c++ gtk glib gtksourceview

所以我正在尝试使用GtkSourceViewmm在C ++中使用GtkSourceView,其文档和支持程度给我的印象是它在很长一段时间内都没有经过仔细研究。但我总是乐观主义者:)

我正在尝试使用类似于以下内容的代码添加SourceView

 Glib::RefPtr<gtksourceview::SourceLanguageManager> source_language_manager = gtksourceview::SourceLanguageManager::create();
 Glib::RefPtr<gtksourceview::SourceLanguage> source_language = Glib::wrap(gtk_source_language_manager_guess_language(source_language_manager->gobj(), file, NULL));
 Glib::RefPtr<gtksourceview::SourceBuffer> source_buffer = gtksourceview::SourceBuffer::create(source_language);
 gtksourceview::SourceView* = m_source_view = new gtksourceview::SourceView(source_buffer);

 m_vbox.pack_start(*m_source_view);

不幸的是,它会发出警告

  

(algoviz:4992):glibmm-WARNING **:   无法包装类型的对象   'GtkSourceLanguage'。提示:这个错误   通常是由于未能打电话造成的   库init()函数。

当我在调试器中查看它时,确实上面的第二行(带有Glib::wrap()的那一行)正在返回NULL。我不知道为什么会这样,但我试着通过在程序的开头添加Glib::init()来注意警告,但这似乎没有任何帮助。

我试过谷歌,但一直没有成功。有谁知道Glib要我初始化才能能够进行换行调用?或者,更好的是,是否有人知道使用GtkSourceViewmm的任何工作示例代码(不仅仅是常规的GtkSourceView)?我无法找到任何实际的示例代码,甚至在Google代码搜索中也找不到。

谢谢!

2 个答案:

答案 0 :(得分:6)

事实证明,我需要初始化的可能并不奇怪:

gtksourceview::init();

在此之后,我遇到了gtksourceview::SourceLanguageManager参数之一的另一个问题,但这是由我subsequently reported的一个真正的错误引起的并且被及时修复了。所以现在一切都很好!

答案 1 :(得分:0)

我使用gtkmm。通常,您必须使用以下内容初始化事物:

_GTKMain = new Gtk::Main(0, 0, false);

当然不要忘记:

delete _GTKMain;

点击此处了解详情:

http://library.gnome.org/devel/gtkmm/2.19/classGtk_1_1Main.html

(抱歉,链接选项不起作用......)