2010-07-13 74 views
3

所以我试图在C++中使用GtkSourceView,使用GtkSourceViewmm,它的文档和支持程度给我的印象是它很长时间没有被仔细看过。但我总是一个乐观主义者:)为了使用Glib :: wrap,必须要做些什么Glib :: init()

我试图使用类似于下面的一些代码添加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代码搜索。

谢谢!

回答

5

原来,每HAPS这并不奇怪,这是我需要的init是:

gtksourceview::init(); 

在此之后,我遇到了另一个问题与参数gtksourceview::SourceLanguageManager之一,但是这是一个真正的错误,我subsequently reported和被及时固定所致。所以现在一切都很好!

+1

对于较新的版本,此更改为Gsv :: init()。 – ergosys 2011-12-05 22:47:03

+0

要使用Gsv :: init(),您需要包含gtksourceviewmm.h – Parker 2017-09-12 13:31:39

0

我使用gtkmm。通常,您有类似初始化的事情:

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

当然不要忘了:

delete _GTKMain; 

检查查看详情:

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

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

+0

你链接到完全相同的问题,你回答= P – 2010-07-13 21:55:18

+0

@阿德里安:是的,你说得对。我纠正了这一点,谢谢你:-) – neuro 2010-07-19 07:26:49

+0

嘿嘿,没问题:)但我已经这样做了(如果我错过了主循环,我不认为这个窗口甚至会出现!)问题是其他问题,我发布在我自己的答案。 感谢您的回答! – 2010-07-19 08:15:47