1

巨大なデータセットを表示することになっている Gtkmm 用のカスタム ウィジェットを作成しています (4096x256 文字のデータシートのようなものを想像してください)。

主に優雅さのためですが、Glade/Gtk-Builder エディターでの使用の可能性のためにも、このウィジェットで ScrolledWindow をネイティブにサポートする必要があります。つまり、ScrolledWindow の子として設定されると、スクロール可能なウィジェットとして認識されます。 、水平方向および垂直方向の調整オブジェクトを設定できるようになり、後で改ざんできます。

ウィジェットのコンストラクターで次のようなことを行う必要があります。

// get Gtk C type from wrapper class
GtkWidget* gwidget = this->gobj();

// imagine code here that magically creates a gobject signal, 
// that we can catch in C++.
// this is actually the part which I don't know how to do.
guint my_signal = magic_way_to_create_this_signal(
                   &MyClass::rainbow_unicorn_signal_handler);

// make ScrolledWindow recognize this window as scrollable
GTK_WIDGET_GET_CLASS(gwidget)->set_scroll_adjustments_signal = my_signal;

後で、ウィジェットが追加されたときに ScrolledWindow によって発行されたシグナルは、シグナル プロキシ メソッドなどを介してウィジェットによってキャッチされる必要がありますか? 何も思いつきません。

これどうやってするの?

4

1 に答える 1

1

' magic_way_to_create_this_signal'はg_signal_new()です。クラスを定義するGObjectの方法の一部であるウィジェットのmy_widget_class_init()関数でそれを呼び出します。Gtkmmで同等のものが何であるか正確にはわかりません。

GTKドキュメントの脚注も参照してください。ウィジェットをネイティブにスクロール可能にすることがなぜそんなに面倒なのかが説明されています。

Gtk::Viewportまた、子ウィジェットにスクロール機能を追加するにウィジェットを配置することもできます。

于 2010-02-05T13:48:47.233 に答える