Есть ли способ заставить метку никогда не пытаться изменить размер при изменении текста?
Проблема, которую я пытаюсь решить, состоит в том, что при изменении размера и перерисовке моей системы 500+ виджетов в моем приложении занимает порядка 300-400 мс. Все виджеты находятся в иерархии виджетов отображаемого окна под окном верхнего уровня с различными представлениями, хранящимися в Gtk :: Stack. У меня есть несколько считываний данных, которые должны быть обновлены около 4 Гц.
Я разочарован тем, что минимальный размер метки никогда не приближается к выделенному размеру. Тем не менее, изменение минимального размера запускает пересчет каждого виджета в иерархии.
Я пытался переключиться с метки на текстовое представление по этот обсуждение списка рассылки 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 );
}
Задача ещё не решена.
Других решений пока нет …