有没有办法强制标签在文本更改时从不尝试重新调整大小?
我要解决的问题是,在我的系统上重新调整大小和重新绘制应用程序中的 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 );
}