Свернуть и развернуть столбцы таблицы

Реализую модель таблицы, которая может сворачивать и разворачивать столбцы. За это отвечает роль SubtableRoleDeploy. В свернутом состоянии заголовок и данные отличаются чем в развернутом.

Фото таблицы

Ниже пример кода. В нем я использую пересекающиеся begin/end вставки и удаления колонок. Тут написано, что вложенные(возможно и пересекающиеся) нельзя использовать. Это правильная реализация?

bool VectorModel::setHeaderDataHorizontal(int section, const QVariant &value, int role) {
    switch (role) {
    case SubtableRoleDeploy:
        if (value.toBool()) {
            Q_ASSERT(bus && !bus->deploy());
            beginRemoveColumns(index(0, section).parent(), section, section);
            beginInsertColumns(index(0, section).parent(), section, section + bus->pinsCount());
            bus->setDeploy(true);
            endRemoveColumns();
            endInsertColumns();
        } else {
            Q_ASSERT(pin && pin->parentConst() && pin->parentConst()->deploy());
            int busStart = section - pin->indexOfParent();
            int busEnd = busStart + pin->parentConst()->pinsCount();
            beginRemoveColumns(index(0, section).parent(), busStart, busEnd);
            beginInsertColumns(index(0, section).parent(), busStart, busStart);
            pin->parent()->setDeploy(false);
            endRemoveColumns();
            endInsertColumns();
        }
        return true;
    /*somecode*/
    }
}

Так же есть мысли использовать changeData. Если так, я боюсь что заголовок автоматически не изменится.


Ответы (0 шт):