修改QTabWidget中的选项卡,其中每个选项卡代表QTableView

时间:2011-12-09 14:37:32

标签: c++ qt qtableview

我有一个标签小部件,其中每个标签都是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);
}

1 个答案:

答案 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);

我仍然想知道这是什么让你重复使用旧的表视图无法做到。