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