【问题标题】:QTableView cannot hide columnQTableView 无法隐藏列
【发布时间】:2012-12-12 11:46:28
【问题描述】:

好吧,问题来了:

  1. 我构造了一个QTableView并使用setModel(myModel)方法将模型myModel绑定到myTableView

  2. 一开始myModel中没有数据,我用hideColumn(0)来做这个工作,效果很好,而在我将数据加载到myModel之后,我隐藏的列刚刚出现。

谁能告诉我当模型发生变化时如何保持列的隐藏状态

欢迎提出任何建议。


好的,这里是代码。

void ModelView::createModelAndView()
{

    _TableModel = new TableModel(this);

    _Table = new QTableView(this);

    _Table->setModel(_TableModel);

    _Table->hideColumn(0);      
    _Table->hideColumn(10);     
}

现在_TableModel 没有数据了。

然后如下:

_TableModel->loadData();

loadData() 方法用于获取数据并将数据推送到模型。在这一步之后,视图(即_Table)发生了变化。

【问题讨论】:

  • 你经常更换模型吗?
  • 不,最大的区别在于里面是否有数据(即项目)。
  • 好吧,我问的是因为隐藏列应该在模型数据更改时保持不变......但当您将模型更改为另一个时可能不会。
  • 我没有改变模型,只有一个模型,并且模型在初始化期间无法获取所有项目,但后来有一个方法将数据加载到其中。所以模型不会改变,视图也不会改变。
  • 对,但是一旦在第一次提取数据后将列设置为隐藏,它应该在视图中保持这种状态。问题是在获得一些数据之前,视图永远不会被赋予模型的维度。您使用的是什么类型的模型?如果它是 QStandardItemModel,您是否使用 row/col 值对其进行初始化?

标签: c++ qt model-view


【解决方案1】:

这样做:

connect(dataModel, SIGNAL(modelReset()), SLOT(modelReset()));

modelReset() 插槽中:

void SomeClass::modelReset()
{
  tableView->hideColumn(0);
}

【讨论】:

    【解决方案2】:

    首先设置数据模型,然后调整其 GUI 表示:

    tableView->setModel(dataModel);
    tableView->hideColumn(0);
    

    【讨论】:

    • 是的..但是你上面说的正是我所做的..关键是一开始里面有 NO 数据,然后我向其中添加数据,然后隐藏列刚刚出现。
    • 您必须更改数据模型,而不是其中的数据。向我们展示您的代码。
    • 当您将数据拉入模型时,模型最有可能重置。这可能意味着任何事情,包括添加/删除列。 GUI 与模型一起重置。
    猜你喜欢
    • 2013-09-30
    • 2011-09-15
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    相关资源
    最近更新 更多