3

( sscce : here )GtkTreeView内に 2 つの s がパックされていることを示すプログラムがあります。GtkPaned

gtk_paned_add1(GTK_PANED(paned), tree_view1);
gtk_paned_add2(GTK_PANED(paned), tree_view2);

結果は次のとおりです。

2 つのツリー ビューを表示するウィンドウ

ただし、テーブルが大きくなる可能性があるため、GtkScrolledWindows (sscce: here )に追加しました。

GtkWidget *scrolled_window1 = gtk_scrolled_window_new(NULL, NULL),
          *scrolled_window2 = gtk_scrolled_window_new(NULL, NULL);
gtk_container_add(GTK_CONTAINER(scrolled_window1), tree_view1);
gtk_container_add(GTK_CONTAINER(scrolled_window2), tree_view2);
gtk_paned_add1(GTK_PANED(paned), scrolled_window1);
gtk_paned_add2(GTK_PANED(paned), scrolled_window2);

ただし、以下のスクリーンショットのように、ウィンドウはほとんど薄いトランス状態になるまで折りたたまれます。

めちゃくちゃ小さい窓

ウィンドウを最大化すると、最初の列は表示されません (ただし、手動で展開することはできます)。

最初のテーブルが表示されない

GtkScrolledWindowsでは、このシナリオで使用した最初のスクリーンショットの外観を取得する最良の方法は何ですか? また、ペインの列のサイズを相互に関連付けて定義できますか (たとえば、最初の列は 30%、2 番目の列は 70% など)。

4

2 に答える 2

2

私はこのパターンを使用しています(誰かがより良い答えを投稿してくれたら嬉しいです):

GtkWidget* treeView_, pane1_;
// [Removed code to create and show the widget heirarchy.]
GtkRequisition sizeReq;
gtk_widget_size_request(treeView_, &sizeReq);  // get tree's preferred size
gtk_paned_set_position(GTK_PANED(pane1_), sizeReq.width);

これはかなり近くなりますが、おそらくいくつかの非表示のピクセルを持つ水平スクロールバーがあります。このアプリケーションは、ペインの位置に対するユーザーの調整を記憶しているため、初期レイアウトで「十分に見栄えがする」だけで済みます。

また、gtk_widget_size_request()が意味のあるものを返すための要件が​​あります。私の場合、サイズ要求を取得する前に、階層でgtk_widget_show_all()を呼び出しました。

于 2012-09-25T22:19:58.397 に答える
1

私が採用した解決策は、実際にスクロールされたウィンドウのサイズを設定することでした ( sscce ):

gtk_widget_set_size_request(scrolled_window1, 200, 600);
gtk_widget_set_size_request(scrolled_window2, 600, 600);

結果は、予想どおり、800x600 のウィンドウでした。

寸法の良い窓

私は満足していません。このアプローチは任意のサイズに依存しており、「手動」すぎるようです。とはいえ、自分のソフトを使いたいのでとりあえず採用。

于 2012-09-28T20:17:38.090 に答える