GTK3 で TreeView を取得してテキストを正しく折り返すのに問題があります。
このようにラップするように設定しました:
Gtk::TreeViewColumn* pColumn = mTreeView.get_column(2);
static_cast<Gtk::CellRendererText *>(pColumn->get_first_cell())
->property_wrap_mode().set_value(Pango::WRAP_WORD_CHAR);
static_cast<Gtk::CellRendererText *>(pColumn->get_first_cell())
->property_wrap_width().set_value(200);
これは機能し、テキストは折り返されますが、ウィンドウのサイズを変更して大きくすると、長いテキストのセルの上下に醜い空白がたくさんあります。GTK は、ラップ幅に基づいてセルの高さを予約しているようです。これは私には意味がありません。
次のように必要な幅を計算して、signal_check_resize で必要な設定を回避しようとしました。
Gtk::TreeViewColumn* pColumn = mTreeView.get_column(2);
auto width = this->get_allocated_width()
- mTreeView.get_column(0)->get_width()
- mTreeView.get_column(1)->get_width();
static_cast<Gtk::CellRendererText *>(pColumn->get_first_cell())
->property_wrap_width().set_value(width-100);
this->forceRecreateModel = true; //Needed to work
しかし、これではウィンドウを大きくすることしかできません。リサイズ後の縮小はできません。
問題は、これがどのように適切に行われるかです。
Arch Linux で gtk3.20.3-1 と gtkmm3.20.1-1 を使用しています。
編集:タイトルの誤字を修正...