0

グリッドのみを含むWindowオブジェクトがあります。Gtk :: Builderを使用してグリッドへのポインターを取得し、次にいくつかのGtk :: Boxを使用Gtk::Box->pack_end()してグリッドを何度も(毎回操作されたコンテンツで)グリッドに追加したいと思います。

それが呼ばれるたびpack_end()に私は得るが:

gtk_box_pack: assertion 'gtk_widget_get_parent (child) == NULL' failed私の端末では、ボックスに何も追加されません。

私は何をすべきか?

ありがとう

*編集:目標:すべてのレコードが次々に垂直に表示されますが、DBテーブルのエントリを各レコードの豪華なウィジェットに配置したいと思います。派手なウィジェットをGladeのウィンドウとして作成し、Gtk::Builderを使用してそれへのポインターを取得できると思いました。そのため、ファンシーのGladeファイルには、カスタムの外観を持つグリッドを含むウィンドウがあります。、を実行しようとすると、上記のエラーがadd発生pointer to the fancy *grid*toますvisible window's Box。はっきりしているといいのですが。

4

1 に答える 1

0

解決策は次のgtk_box_pack: assertion 'gtk_widget_get_parent (child) == NULL' failedとおりです。

最初に行う必要があるのは、ウィンドウなしでウィジェットを描画することだけです。そのため、ビルダーでロードすると親がなくなり、アサーションが成功します。

ここで別のポイントがありますが、グリッドの最初のインスタンスをボックスに追加すると、2 番目のインスタンスで再び同じエラーが発生します。試行錯誤を繰り返した結果、Gtk::Builder::create_from_file()使用できるグリッドの新しい親のないインスタンスを作成するために使用する必要があることに気付きました。この方法で動作します。

レコードの数が大きくなる場合は、パフォーマンスに大きな違いがあるはずですが、Gtk::Widget のコピー コンストラクターはプライベートであり、直接コピーすることはできません。この「パフォーマンス」の問題の解決について。

于 2012-08-09T07:33:25.177 に答える