<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Обновить(перерисовать) виджет (gtkmm/GTK)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7472.html</link>
    <description>Доброго времени суток. Использую gtkmm и среду NetBeans.&lt;br&gt;Вот суть проблемы:&lt;br&gt;В многопоточном приложении есть окно с виджетом TreeView (основной поток), в TreeView динамически добавляются новые строчки (приходят сигналы из другого потока). Как вызвать перерисовку окна&#092;виджета для динамического отображения добавленных данных? Дело в том, что они обновляются только, к примеру, при нажатии кнопок на форме, перемещении окна или хотя бы передвижении мыши, т.е. если окно не трогать - данные не обновляются.&lt;br&gt;нашел в официальной доке по gtkmm вот такой код, положил его в метод, добавляющий новую строчку:&lt;br&gt;&lt;br&gt;//------------------------------------------------------------------------&lt;br&gt;            while(Gtk::Main::instance()-&amp;gt;events_pending())&lt;br&gt;                Gtk::Main::instance()-&amp;gt;iteration();&lt;br&gt;//------------------------------------------------------------------------&lt;br&gt;&lt;br&gt;Он работает (строки таблицы обновляются без всяких действий пользователя) но! Программа с ним работает крайне нестабильно - почти сразу же вываливаетс</description>

<item>
    <title>Обновить(перерисовать) виджет (gtkmm/GTK) (HellFire)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7472.html#2</link>
    <pubDate>Mon, 14 Jul 2008 12:26:47 GMT</pubDate>
    <description>Благодарю.&lt;br&gt;Честно говоря, у меня сделать через g_idle_add() не получилось, но, став копать в данном направлении, в итоге решил проблему через  Glib::Dispatcher и Widget::queue_draw().&lt;br&gt;:)&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Обновить(перерисовать) виджет (gtkmm/GTK) (arturpub)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7472.html#1</link>
    <pubDate>Sat, 12 Jul 2008 10:33:14 GMT</pubDate>
    <description>идея понятна ))&lt;br&gt;можно попробовать решить проблему так:&lt;br&gt;(сиплюс не знаю, так что пишу на сях ;)&lt;br&gt;&lt;br&gt;gboolean callback(gpointer some_data) &#123;&lt;br&gt;    &amp;lt;вставляем строку с данными из some_data&amp;gt;&lt;br&gt;    return FALSE; // снять этот callback, чтобы в след. итерации не выполнился&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;...&lt;br&gt;&amp;lt;тут мы понимаем что пора вставлять строку&amp;gt;&lt;br&gt;gpointer some_data = ???; // суем сюда сам TreeView и нужные данные&lt;br&gt;g_idle_add((GSourceFunc) callback, some_data);&lt;br&gt;&lt;br&gt;когда в основном (гтк) треде дело дойдет до следующей итерации по событиям, ваш callback выполнится, а также перерисуется и TreeView. прям до конца не уверен, но по идее должно сработать без странных последствий. g_idle_add в gtkmm скорее всего не метод к-л класса.&lt;br&gt;&lt;br&gt;http://research.operationaldynamics.com/blogs/andrew/software/gnome-desktop/gtk-thread-awareness.html&lt;br&gt;http://library.gnome.org/devel/gdk/unstable/gdk-Threads.html -- вот тут есть какой-то пример, найдите в документации gtkmm аналогичную секцию, может будет и там&lt;br&gt;</description>
</item>

</channel>
</rss>
