2014-09-23 33 views
0

我目前正在致力于一个定制的QAbstractItemModel我遇到了一个问题。该模型本身工作良好,但我有问题,如果我试图用QTreeView显示它。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))受到保护...

+0

可能有一个更容易的方法来模型。你在视图中寻找什么结果? – DaveyLaser 2014-09-24 00:00:06

+0

好吧,我现在想要的只是在增加了coumns的数量之后,它应该显示这个新的数字,所以基本上在视图中添加一个。 – Felix 2014-09-24 16:12:18

回答

1

这里是一些其他的信号,树视图的模式可以给出这些应该都会触发,如果您插入一列,所以只需使用适当的和连接更新你的表格视图,尽管我会认为如果你改变底层模型视图应该更新,如果它不重置模型

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

谢谢! 'ui-> treeView-> model() - > layoutChanged();'工作正常!没有它会更新已经显示的列的内容,但不会添加一个。 – Felix 2014-09-24 16:11:29

+0

如果在添加列后再次将模型添加到视图中,那么它应该很好 – AngryDuck 2014-09-24 16:14:08