0

テキストが変更されたときにラベルのサイズを変更しないようにする方法はありますか?

私が解決しようとしている問題は、私のシステムでは、アプリケーションで 500 以上のウィジェットのサイズ変更と再描画に 300 ~ 400 ミリ秒かかることです。すべてのウィジェットは、Gtk::Stack に格納されたさまざまなビューを持つトップ レベル ウィンドウの下にある、表示されたウィンドウのウィジェット階層にあります。約 4Hz で更新する必要があるいくつかのデータ読み出しがあります。

私の欲求不満は、ラベルの最小サイズが割り当てられたサイズに近づくことはないということです。それでも、最小サイズの変更により、階層内のすべてのウィジェットの再計算がトリガーされます。

gnome メーリング リストのこのディスカッションに従って、ラベルからテキスト ビューに切り替えてみましたが、うまくいきませんでした。スケールが移動するにつれて物事がどのように変化するかの例を含めました。サイズが変更されたときに合計ウィンドウが再描画されないように、左のウィジェットのサイズを修正する方法はありますか?

#include <gtkmm.h>

int main( int argc, char* argv[]) {
    Glib::RefPtr<Gtk::Application> app =
        Gtk::Application::create( argc, argv, "test" );

    Gtk::Window window;
    Gtk::Box box;
    Gtk::TextView left;
    Gtk::Label right( "right" );

    Glib::RefPtr<Gtk::Adjustment> adjustment =
        Gtk::Adjustment::create( 0.0, 0.0, 10.0 );
    Gtk::Scale scale( adjustment, Gtk::Orientation::ORIENTATION_VERTICAL );
    scale.set_draw_value( false );

    window.set_size_request(200, 200);

    window.add( box );
    box.pack_start( left, true, true );
    box.pack_start( right, true, true );
    box.pack_start( scale );

    adjustment->signal_value_changed().connect( [&]() {
        Glib::ustring str;
        for( int i = 0; i <= (int)adjustment->get_value(); i++ ) {
            str += "X";
        }
        left.get_buffer()->set_text( str );
    } );

    window.show_all();

    return app->run( window );
}
4

0 に答える 0