代码之家  ›  专栏  ›  技术社区  ›  Ryan Li

如何从外部函数更新Gtk::TreeModel::Row

  •  2
  • Ryan Li  · 技术社区  · 17 年前

    目前我正在开发一个多线程应用程序。我使用树状视图显示每个线程的状态,每个线程一行。

    1. 包含TreeView的主GUI类
    2. 用于线程处理的类

    将Gtk::TreeModel::iterator作为参数传递给第二个类是不可行的,因为我们无法以row[m_Columns.m_id]等格式访问行中的元素。 使用Glib::Dispatcher也不可用,因为我们在外部函数中更改的元素是特定于线程的。

    那么,有什么实用的方法可以从外部函数更新GUI吗?

    2 回复  |  直到 17 年前
        1
  •  2
  •   Ryan Li    17 年前

    喜欢

    class Columns : public Gtk::TreeModel::ColumnRecord
    {
    public:
        Gtk::TreeModelColumn<unsigned int> m_id;
        Gtk::TreeModelColumn<Glib::ustring> m_pin;
        Gtk::TreeModelColumn<Glib::ustring> m_name;
        Gtk::TreeModelColumn<unsigned int> m_percentage;
        Gtk::TreeModelColumn<Glib::ustring> m_status;
    
        Columns()
        {
            add(m_id);
            add(m_pin);
            add(m_name);
            add(m_percentage);
            add(m_status);
        }
    };
    

    所以,若您在GUI类中创建了一个Columns实例m_Columns,并将其作为参数传递给thread类,那个么您可以使用

    (*row)[m_columns.m_id]
    

    访问TreeModel中的元素。

        2
  •  0
  •   neuro    17 年前

    我认为你应该重新思考你的架构。最简单和最安全的方法是线程以线程安全的方式将信息发送给将收集这些信息的类。然后让您的GUI线程读取这些信息,更改您的树视图,然后刷新。

    我希望有帮助。