我有一个标签小部件,其中每个标签都是QTableView。每当需要更改该选项卡的内容时,我希望能够将更新的模型(QModelIndex)传递到每个选项卡中。
替代方法(和更糟糕的方式)是我删除所有选项卡,然后重新创建它们。
我知道我可以通过执行以下操作来获取选项卡中的小部件:
tabWidget->widget(i);
这将返回一个小部件,它实际上是一个QTableView,但我想更新该小部件中的模型,而不必删除并重新创建选项卡。
谢谢!
P.S。这是我目前的尝试......
for (int i = 0; i < tableView.size(); i++)
{
tabWidget->setCurrentWidget(tableView.at(i));
QTableView* updatedTable = (QTableView*)tabWidget->currentWidget();
updatedTable->setModel(dataModel);
tableView.replace(i, updatedTable);
}
答案 0 :(得分:0)
目前尚不清楚为什么你不能保留QTableView小部件而只是改变模型,就像你的代码一样。如果没有tableView.replace
这个东西,视图是否会刷新?
似乎没有直接的API来替换您使用addTab()放入的小部件,而无需通过选项卡删除步骤。但是,不是直接插入QTableView,而是可以在虚拟窗口小部件上调用addTab(),该窗口小部件中的布局包含单个项目。一个QStackedLayout,例如:
QWidget* dummy = new QWidget;
QStackedLayout stackedLayout = new QStackedLayout;
stackedLayout->addWidget(tableView);
dummy->setLayout(stackedLayout);
tabWidget->addTab(dummy);
然后,当你想用新的替换tableView时:
QWidget* dummy = tabWidget->currentWidget();
QStackedLayout newStackedLayout = new QStackedLayout;
newStackedLayout->addWidget(newTableView);
delete dummy->layout();
dummy->setLayout(newStackedLayout);
我仍然想知道这是什么让你重复使用旧的表视图无法做到。