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

Modify a tab in a QTabWidget where each tab represents a QTableView

本文关键字:选项 QTableView 一个 QTabWidget 修改      更新时间:2023-10-16

我有一个标签小部件,其中每个标签是一个QTableView。我希望能够传递一个更新的模型(QModelIndex)到每个选项卡,每当该选项卡的内容需要改变。

对我来说,另一种方法(也是更糟糕的方法)是删除所有的选项卡,然后重新创建它们。

我知道我可以这样做:

    tabWidget->widget(i);

这将返回一个小部件,它实际上是一个QTableView,但我想更新小部件中的模型,而不必删除和重新创建选项卡。

谢谢!

注:这是我当前的尝试…

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);
}

不清楚为什么不能保留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替换tableView时:

QWidget* dummy = tabWidget->currentWidget();
QStackedLayout newStackedLayout = new QStackedLayout;
newStackedLayout->addWidget(newTableView);
delete dummy->layout();
dummy->setLayout(newStackedLayout);

我仍然在想,这给你带来了什么,重用旧的表视图不能做。