LINUX.ORG.RU

checkbox в элементах списка

 , ,


0

1

нужен список элементов с чекбоксами и текстом (возможно текст в нескольких строчках и разным шрифтом). После многочасового чтения документации Qt пришёл к выводу, что вроде ничего стандартного на эту тему нет, нужно мутить свой делегат и внедрять его в QListWidget, QListView или во что-то подобное, я прав?

А как тогда этот чекбокс рисуется? В примерах делегатов виджет создаётся только при редактировании элемента списка. Нужно ли например, каждый раз создавать и удалять экземпляр QCheckBox в обработчике paint() ?

★★★★★

Без делегирования не обойтись, ты прав.

Про чекбоксы (если нужен один) - QListWidget умеет рисовать для одной строки один чекбокс (Qt::Checkable или как-то так). Если нужно больше - только «ручная нарисовка» ;)

Пример HTMLов в QTreeWidget: http://git.pztrn.ru/linuxeed-client.git/blob/HEAD:/src/linuxeed-gui.py#l151 (сделать можно по аналогии)

pztrn ★★★★
()

После многочасового чтения документации Qt пришёл к выводу, что вроде ничего стандартного на эту тему нет, нужно мутить свой делегат и внедрять его в QListWidget, QListView или во что-то подобное, я прав?

Не прав.
Никаких делегатов и ListWidget'ов.

Стандартно - QListView и своя модель.
Унаследуй свою модель и сделай ей Qt::ItemIsUserCheckable во flags() для нужных ячеек.

По поводу шрифтов смотри data() и Qt::ItemDataRole.

schizoid ★★★
()

мутить свой делегат

Не нужно. Делегат вам не поможет ибо работает только во время редактирования элемента.

Нужно ли например, каждый раз создавать и удалять экземпляр QCheckBox в обработчике paint() ?

Это как хочешь. Вообще способ реализации того, что ты хочешь через paint() наименее прожорлив к ресурсам, т.к. фактически работает только один активный виджет, а остальные просто нарисованы.

Другой вариант - использовать свойство itemWidget подсунув свой виджет вместо стандартного. При этом будет создано столько виджетов, сколько элементов в списке, но при небольших (до 1000 например) списках этот способ наименее геморный.

И конечно, если кроме чекбокса вам ничего не надо, это, как уже сказали выше, поддреживается изначально.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

no-such-file

Делегат вам не поможет ибо работает только во время редактирования элемента.

Нет, при отображении тоже работает

unC0Rr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.