В настоящее время я работаю над настройкой QAbstractItemModel
Я столкнулся с проблемой. Пока что сама модель работает нормально, но у меня возникают проблемы, если я пытаюсь отобразить ее с помощью QTreeView.
Сама Модель может самостоятельно изменять номер своего столбца, в зависимости от данных. Но представление никогда не будет обновлять количество отображаемых столбцов, только их содержимое.
Я перегрузил insertColumns
:
bool MyModel::insertColumns(int column, int count, const QModelIndex &parent)
{
bool success;
beginInsertColumns(parent, column, column + count - 1);
success = this->getItem(parent)->insertColumns(column, count);
endInsertColumns();
return success;
}
Я немного поэкспериментировал и обнаружил, что если я каждый раз сбрасываю и устанавливаю вид, он будет отображать правильное количество столбцов:
connect(this->model, SIGNAL(columnsChanged()), this->ui->treeView, SLOT(reset()));
Но должен быть другой способ сделать это. Я ищу функцию, которая просто скажет View, что количество столбцов изменилось. Но единственный, кого я нашел (QTreeView::columnCountChanged(int oldCount, int newCount)
) защищен …
Вот некоторые другие сигналы, которые может дать режим древовидного режима. Все они должны сработать, если вы вставляете столбец, поэтому просто используйте соответствующий и подключитесь для обновления вашего табличного представления, хотя я бы подумал, что если вы измените базовую модель представления следует обновить, и если это не сбрасывает модель
ui->treeView->model()->layoutChanged();
ui->treeView->model()->dataChanged();
ui->treeView->model()->columnsInserted();
ui->treeView->model()->columnsMoved();