【问题标题】:QTreeView update column numberQTreeView 更新列号
【发布时间】:2014-11-18 04:11:15
【问题描述】:

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

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

【问题讨论】:

  • 您的模型可能有更简单的方法。您在视图中寻找什么结果?
  • 好吧,我现在想要的是,在我增加了 Number of couns 之后,它应该显示这个新数字,所以基本上在视图中添加一个。

标签: c++ qt qtreeview qt5.3


【解决方案1】:

如果您插入一列,则树视图模式可以发出的其他一些信号都应该被触发,因此只需使用适当的信号并连接以更新您的表视图,尽管我会认为如果您更改底层模型视图应该更新,如果它不重置模型

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

【讨论】:

  • 谢谢! ui->treeView->model()->layoutChanged(); 工作正常!如果没有它,它会更新已经显示的列的内容,但不会添加一个。
  • 如果在添加列后再次将模型添加到视图中,那么应该没问题
猜你喜欢
  • 1970-01-01
  • 2019-10-29
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 2018-04-29
相关资源
最近更新 更多