Необходимо создать список виджетов (большой), в каждом виджете списка имеются кнопки\чекбоксы и т.д. как это сделать правильно? сейчас имеется костыльная реализация через установку виджета в список функцией - QListWidget::setItemWidget(QListWidgetItem *item, QWidget *widget); Но этот вариант весьма тормозной.
Элементы списка выглядят примерно так:
Для начала попробуйте банально заменить QListView на QVBoxLayout в QScrollArea. Вполне возможно, что стандартные механизмы Qt самостоятельно справятся с большим количеством виджетов, там вроде бы есть механизмы, позволяющие не рисовать невидимые элементы, а setItemWidget вполне может их игнорировать.
Если не поможет - попробуйте использовать Model-View. Создайте модель, которая для каждой строки будет хранить отображающий её виджет без родителя и отрисовывайте её в методе paint делегата при помощи QWidget::render, примерно так:
QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override{
auto data = index.data().value<RowStruct>();
return ret = data.widget->sizeHint();
}
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override{
auto data = index.data().value<RowStruct>();
auto point = painter->deviceTransform().map(option.rect.topLeft());
data.widget->render(painter,point, QRect(QPoint{}, option.rect.size()), QWidget::RenderFlag::DrawChildren);
}
Само по себе большое количество виджетов тут не проблема - главное, чтобы они не отрисовывались все сразу, что обеспечивается View. На крайний случай можно вручную следить за отображаемыми виджетами и удалять лишние.
Основная проблема - это редактирование. Сделать сам виджет доступным для редактирования не проблема - достаточно возвращать его из createEditor делегата, назначив родителя. Но триггеры редактирования в Q**View - это двойной щелчок мышью и подобные. Возможно, поможет переопределение event или eventFilter делегата - я не пробовал.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости