2016-12-11 9 views
1
私は私のTextView以下の方法を使用して(約5〜10行)にデータの複数行を挿入しようとしています

とのTextViewにテキストを挿入しますmyString "は、別の関数から渡された、整形された文字列(末尾の行が設定されている)です。 "のmyString" のサンプルは以下のようになります:C++のgtkmmは、複数のバッファと変更テキスト

  1. これはこれは

    2行目で

  2. ラインの一つであるBlablabla

  3. これはラインスリー

    Blablablaです

文字列の内容は、関数呼び出しごとに異なります。私の問題は、文字列の異なる行に異なるバッファを適用しようとしていることです。

たとえば、背景色を2行目に、緑色を3行目に、赤色を5行目に適用したいとします。データ行を関数に渡すので行単位で渡すのではなく、文字列全体を渡します。 (私のプログラムはマルチスレッドであり、それはうまくいかないので、すべての行を1行ずつ渡すことができませんでした)。

私はこのようなことをしましたが、これは特定の行の代わりにTextViewのバッファ全体を変更するだけです。

buffer->property_background() = "red"; 
txtView->set_buffer(buffer); 
+1

GtkTextTagsを使用して、スタイル設定する文字の範囲に選択的に適用する必要があります。 – andlabs

答えて

0

andlabsによると、Gtk :: TextBuffer :: Tagを使用する必要があります。開始のための抜粋を見つけてください。ここに参照はhttps://developer.gnome.org/gtkmm-tutorial/stable/sec-textview-buffer.html.sl

必要なTagTableとタグを作成し、タグにプロパティを割り当ててタグをTagTableに追加します。

m_reftagtable = Gtk::TextBuffer::TagTable::create(); 
reftagmatch = Gtk::TextBuffer::Tag::create(); 
reftagmatch->property_background() = "orange"; 
m_reftagtable->add(reftagmatch); 

m_textbuffer = Gtk::TextBuffer::create(m_reftagtable); 
m_textview->set_buffer(m_textbuffer); 

TagTableとTextbufferを作成します。私たちはあなたには、いくつかの条件があり、オレンジ色の背景にプレーンテキストまたはテキストを追加することができますいずれかplaintextconditionのブール状態に応じて仮定しましょう。

iterend = m_textbuffer->get_iter_at_offset(m_textbuffer->get_char_count()); 
if (plaintextcondition){ 
    m_textbuffer->insert(iterend, "Plain text"); 
} else { 
    m_textbuffer->insert_with_tag(iterend, "Orange Text", refTagMatch); 
} 

もちろんこれはヒントです。詳細については、リファレンスを参照してください。

関連する問題