2011-12-06 23 views
2

は、これは私がテキストボックスを埋めるために開始されますが、ボックスは複数のテキストに対応するために拡大を続けているとして、テキストビューをスクロール可能にしたい、これまで私が持っているものGTKやスクロールテキストビュー

GtkWidget* createConsoleBox() 
{ 
     GtkWidget* textArea = gtk_text_view_new(); 
     GtkWidget* scrollbar = gtk_vscrollbar_new(gtk_text_view_get_vadjustment(GTK_TEXT_VIEW(textArea))); 
     GtkWidget* textEntry = gtk_entry_new(); 

     GtkWidget* console = gtk_table_new(3, 2, FALSE); 

     gtk_table_attach_defaults(GTK_TABLE(console), textArea, 0, 1, 0, 1); 
     gtk_table_attach_defaults(GTK_TABLE(console), scrollbar, 1, 2, 0, 1); 

     gtk_table_attach_defaults(GTK_TABLE(console), textEntry, 0, 2, 1, 2); 

     return console; 

} 

です。方法テキストビューのサイズを制限し、スクロール可能なテキストビューを作成します。あなたが経験何

答えて

8

スクロールバーがGTKでどのように動作するのか誤解されています。通常はスクロールバーを直接作成するのではなく、スクロールしたいウィジェットをGtkScrolledWindowに置きます。自動的にスクロールバーが作成され、スクロールされたウィンドウ内のウィジェットに接続されます。あなたのケースでは、テキストビュー。

GtkWidget* createConsoleBox() 
{ 
    GtkWidget* textArea = gtk_text_view_new(); 
    GtkWidget* scrolledwindow = gtk_scrolled_window_new(NULL, NULL); 
    GtkWidget* textEntry = gtk_entry_new(); 
    GtkWidget* console = gtk_table_new(3, 1, FALSE); 

    gtk_container_add(GTK_CONTAINER(scrolledwindow), textArea); 
    gtk_table_attach_defaults(GTK_TABLE(console), scrolledwindow, 0, 1, 0, 1); 
    gtk_table_attach_defaults(GTK_TABLE(console), textEntry, 0, 1, 1, 2); 

    return console; 
} 

はここにあなたのcreateConsoleBox()関数がどのように見えるかです

1

:-)事前に

おかげで親コンテナに多くのスペースを求めて、ウィジェットの結果です。 親コンテナに拡張を禁止するルールがいくつかある場合を除き、子ウィジェットが要求するスペースを確保します。

これを避ける一般的な方法は、子ウィジェットのサイズをgtk_widget_set_size_request()に設定し、親プロパティに応じて親が縮小または拡大できるかどうかを確認する方法です。

このサンプルコードは、これを実現する1つの方法を示しています。

#include <gtk/gtk.h> 

GtkWidget* createConsoleBox() 
{ 
    GtkWidget* textArea = gtk_text_view_new(); 
    GtkWidget* scrollbar= gtk_vscrollbar_new(gtk_text_view_get_vadjustment(GTK_TEXT_VIEW(textArea))); 
    GtkWidget* textEntry = gtk_entry_new(); 

    GtkWidget* console = gtk_table_new(3, 2, FALSE); 

    gtk_table_attach_defaults(GTK_TABLE(console), textArea, 0, 1, 0, 1); 
    gtk_table_attach_defaults(GTK_TABLE(console), scrollbar, 1, 2, 0, 1); 
    gtk_table_attach_defaults(GTK_TABLE(console), textEntry, 0, 2, 1, 2); 
    //This code sets the preferred size for the widget, so it does not ask for extra space 
    gtk_widget_set_size_request(textArea, 320, 240); 

    return console; 
} 


int main(int argc,char* argv[]){ 
    GtkWidget *window; 
    gtk_init(&argc, &argv); 

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_title(GTK_WINDOW(window), "Simple Sample"); 
    gtk_window_set_default_size(GTK_WINDOW(window), 800, 600);// does not matter this size 
    gtk_container_add(GTK_CONTAINER(window), createConsoleBox()); 
    gtk_widget_show_all(window); 
    gtk_window_set_resizable(GTK_WINDOW(window),FALSE);//because of this 
    gtk_main(); 
    return 0; 
} 

gtk_window_set_resizable()(アプリケーションはまだそれをリサイズすることができます)ユーザーによるウィンドウの非リサイズさせるためのものが、その子ウィジェットのサイズにウィンドウをtightingの余分propertieを持っています。各GtkContainerには、拡張、太さなどを設定する方法があります。必要なものを見つけるための実験の問題だけです。 ウィンドウのサイズ変更可能なプロパティがTRUEに設定されている場合、テキストエリアにはまだ指定されたサイズがあります。コンテナはGtkTable内の個々のウィジェットの間に余分なスペースを入れます。