3

そのため、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-警告**:タイプ'GtkSourceLanguage'のオブジェクトをラップできませんでした。ヒント:このエラーは通常、ライブラリのinit()関数の呼び出しに失敗したことが原因で発生します。

デバッガーでそれを見ると、実際、上の2行目(が付いている行Glib::wrap())はを返してNULLいます。これがなぜなのかはGlib::init()わかりませんが、プログラムの冒頭に追加して警告に注意を払おうとしましたが、それもまったく役に立たなかったようです。

私はグーグルを試してみましたが、失敗しました。そのラップコールを実行できるようにするために、Glibが私に初期化を求めていることを誰かが知っていますか?または、さらに良いことに、GtkSourceViewmm(通常のGtkSourceViewだけでなく)を使用する実用的なサンプルコードを知っている人はいますか?Googleコード検索でも、実際のサンプルコードを見つけることができませんでした。

ありがとう!

4

2 に答える 2

5

おそらく驚くことではないが、私が初期化する必要があったのは次のとおりであることがわかった。

gtksourceview::init();

この後、パラメータの1つで別の問題gtksourceview::SourceLanguageManagerが発生しましたが、これは本物のバグが原因であり、後で報告してすぐに修正しました。これで、すべてがうまく機能しています。

于 2010-07-19T08:14:49.910 に答える
0

私はgtkmmを使用しています。通常、次のようなもので初期化する必要があります。

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

もちろん忘れないでください:

delete _GTKMain;

詳細はこちらをご覧ください:

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

(申し訳ありませんが、リンクオプションは機能しません...)

于 2010-07-13T17:11:21.737 に答える