C++ QTreeView更新列号

C++ QTreeView更新列号,c++,qt,qtreeview,qt5.3,C++,Qt,Qtreeview,Qt5.3,我目前正在进行qabstractemmodel的定制,我遇到了一个问题。到目前为止,模型本身运行良好,但如果我尝试使用QTreeView显示它,我会遇到问题 模型本身可以根据其数据自行更改列号。但是视图永远不会更新显示的列数,只更新它们的内容。 我确实重载了insertColumns: bool MyModel::insertColumns(int column, int count, const QModelIndex &parent) { bool success;

我目前正在进行
qabstractemmodel
的定制,我遇到了一个问题。到目前为止,模型本身运行良好,但如果我尝试使用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()));

但必须有另一种方法来做到这一点。我正在寻找一个函数,它只会告诉视图列计数已更改。但是我发现的唯一一个(
QTreeView::columnCountChanged(int-oldCount,int-newCount)
)是受保护的…

这里是treeview模式可以发出的一些其他信号。如果插入列,这些信号都应该被触发,所以只需使用适当的一个并连接到表视图上进行更新,虽然我认为如果你改变了基础模型,视图应该更新,如果它没有重置模型

ui->treeView->model()->layoutChanged();
ui->treeView->model()->dataChanged();
ui->treeView->model()->columnsInserted();
ui->treeView->model()->columnsMoved();

对于您的模型,可能有一种更简单的方法。你在视图中寻找什么结果?好吧,我现在想要的是,在我增加coumn的数量后,它应该显示这个新的数字,所以基本上在视图中添加一个。谢谢<代码>ui->treeView->model()->layoutChanged()工作正常!如果不这样做,它会更新已经显示的列的内容,但不会添加任何列。如果在添加列后再次将模型添加到视图中,则应该可以