Интерфейс
ГиоListModel
Описание [источник]
interface Gio.ListModel : GObject.Object
GListModel
— это интерфейс, представляющий mutable список GObject
. Его основная задача — это модель для различных виджетов в пользовательских интерфейсах, таких как список perspectives, но он также может использоваться как удобный способ возвращения списков данных, с поддержкой повышения уровня.
Каждый объект в списке также может_raise_меняются в себе через определенный mechanism (обычно сигнал GObject::notify
). Вgether с signal GListModel::items-changed
, это обеспечивает список, который может изменяться в своей основе, и в котором также могут изменяться индивидуальные properties.
Хороший пример — это список видимых беспроводных точек доступа, где каждая точка доступа может отчитываться о динамических properties, таких как strength.
Важно отметить, что сам GListModel
автоматически не закие/runtime изменения для каждого из единичных items. Он только отчитывается о runtime изменения для membership списка. Если вы хотите наблюдать изменения для themselves пак объектов, то вам нужно подсоединить сигналы к объектам, которые вас интересуют.
Все items в GListModel
are того же type (или derived from). Метод g_list_model_get_item_type()
возвращает этот тип. Тип может быть interface, в этом случае все objects в списке должны implement этот interface.
Семантически они близки к array: g_list_model_get_n_items()
возвращает количество items в списке, и g_list_model_get_item()
возвращает item в position (начиная с 0). В order to allow implementations to calculate the list length lazily, вы также можете iterate над items: начиная с 0, постоянно calling g_list_model_get_item()
до тех пор, пока он не вернет NULL
.
Реализация может создавать objects lazily, но должна究竟и провозгласить одна и та же object для given position, пока все ссылки на нее蕊're gone.
С другой стороны, ожидается, что consumer будет только удерживать references на objects, которые currently ‘user visible’, чтобы facilitate максимальный уровень laziness in the implementation of the list и to reduce the number of signal connections needed at a given time.
Этот interface предназначен только для использования из single thread. Thread в котором это .
随着时间的推移,为列表模型实现提供属性item-type
和n-items
已成为一个良好的实践,以简化与它们的工作。虽然这不是强制要求的,但建议实施这些两个属性。它们应分别返回g_list_model_get_item_type()
和g_list_model_get_n_items()
的值,并被定义为这样的。
properties[PROP_ITEM_TYPE] =
g_param_spec_gtype ("item-type", NULL, NULL, G_TYPE_OBJECT,
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
properties[PROP_N_ITEMS] =
g_param_spec_uint ("n-items", NULL, NULL, 0, G_MAXUINT, 0,
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
先决条件
为了实现ListModel,您的类型必须继承自GObject
。
信号
Gio.ListModel::items-changed
每次向list
中添加或删除项目时,都会发出此信号。在position
处,移除了removed
项目,并在其位置添加了added
项目。
since: 2.44
接口结构
struct GioListModelInterface {
GTypeInterface g_iface;
GType (* get_item_type) (
GListModel* list
);
guint (* get_n_items) (
GListModel* list
);
GObject* (* get_item) (
GListModel* list,
guint position
);
}
GListModel
的虚拟函数表。
接口成员
g_iface |
|
父类 |
|
get_item_type |
|
g_list_model_get_item_type()的虚拟函数指针。 |
|
get_n_items |
|
g_list_model_get_n_items()的虚拟函数指针。 |
|
get_item |
|
g_list_model_get_item()的虚拟函数指针。 |