QTreeView更新列编号

QTreeView update column number

本文关键字:编号 更新 QTreeView      更新时间:2023-10-16

我目前正在定制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;
}

我做了一点实验,发现如果我每次重置和设置View,它将显示正确的列数:

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();