Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: voltron от Ноябрь 27, 2011, 14:14



Название: QTreeWidget: проблема управлением чекбоксами
Отправлено: voltron от Ноябрь 27, 2011, 14:14
Есть QTreeWidget, в котором отображается древовидная структура, состоящая из «папок» и «элементов» причем «папки» могут быть вложенными. У каждого QTreeWidgetItem'a есть чекбокс для включения/выключения видимости. Проблема в том, что снятие чекбокса к группы приводит к изменению состояния переключателей всех вложенных элементов.

Например, имеем группу с 3мя дочерними элементами.  Если сбросить чекбоксы у всех дочерних элементов, кроме одного, то чекбокс самой группы будет затененный. Теперь, если изменить состояние чекбокса  группы (например, выключить) то соответствующим образом изменится состояние чекбоксов дочерних элементов (они тоже станут выключенными). И при включении чекбокса группы, все дочерные элементы тоже станут включеными.

Можно ли как-то изменить/обойти такое поведение? Смотрел в Assistant, искал по форуму, но ничего подходящего не нашел.


Название: Re: QTreeWidget: проблема управлением чекбоксами
Отправлено: Wlad_C от Ноябрь 28, 2011, 12:50
Вместо флага:
Qt::ItemIsTristate
установить флаг:
Qt::ItemIsUserCheckable

В этом случае, флаги устанавливаются независимо.


Название: Re: QTreeWidget: проблема управлением чекбоксами
Отправлено: voltron от Ноябрь 29, 2011, 16:32
Спасибо.

Проверил код, устанавливается как раз флаг Qt::ItemIsUserCheckable.
Код:
setFlags( Qt::ItemIsEditable | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable );
setCheckState( 0, Qt::Checked );
Похоже, дело не в этом