Что должно быть Glib :: init () 'ed для использования Glib :: wrap? - PullRequest
4 голосов
/ 13 июля 2010

Так что я пытаюсь использовать GtkSourceView в C ++, используя GtkSourceViewmm , чья документация и уровень поддержки дают мне впечатление, что он не очень внимательно рассматривался в течение длительного времени. Но я всегда оптимист :)

Я пытаюсь добавить 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() в начало программы, но это тоже не помогло.

Я пробовал гуглить, но безуспешно. Кто-нибудь знает, что Глиб хочет, чтобы я инициировал, чтобы я мог сделать этот вызов? Или, что еще лучше, кто-нибудь знает какой-нибудь рабочий пример кода, который использует GtkSourceViewmm (а не только обычный GtkSourceView)? Мне не удалось найти пример кода, даже в Google Code Search.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 19 июля 2010

Оказывается, возможно, неудивительно, что для инициализации мне нужно было:

gtksourceview::init();

После этого я столкнулся с другой проблемой с одним из параметров, равным gtksourceview::SourceLanguageManager, но это было вызвано подлинной ошибкой, о которой я впоследствии сообщил , и была быстро исправлена. Так что теперь все отлично работает!

0 голосов
/ 13 июля 2010

я использую gtkmm.Обычно вы должны инициализировать что-то вроде:

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

Конечно, не забывайте:

delete _GTKMain;

Проверьте здесь для деталей:

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

(Извините, но опция ссылки не работает ...)

...