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

Adr*_*scu 4 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);
Run Code Online (Sandbox Code Playgroud)

不幸的是,它吐出了警告

(algoviz:4992):glibmm-WARNING**:无法包装"GtkSourceLanguage"类型的对象.提示:此错误通常是由于未能调用库init()函数引起的.

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

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

谢谢!

Adr*_*scu 6

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

gtksourceview::init();
Run Code Online (Sandbox Code Playgroud)

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

  • 对于较新的版本,这会更改为Gsv :: init(). (2认同)