首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QTableView/QTableWidget缓存不同视图

QTableView/QTableWidget缓存不同视图
EN

Stack Overflow用户
提问于 2015-01-04 05:50:33
回答 1查看 615关注 0票数 1

我正在编写一个应用程序,在QTableView/QTableWidget中从web服务器读取和显示数据。每个条目将有几个列和SetData来保存每个条目(QVariant)中隐藏的信息(来自UI)。

要点是,QTableView/QTableWidget的内容根据用户从ListBox中选择的内容进行更改,因此每次ListBox选择发生变化时,QTableView/QTableWidget中的所有条目都将被清除,并显示与其相关的项。

我希望缓存用户单击Listbox条目的所有条目,因此如果用户返回到同一项,只需在QTableView/QTableWidget中显示以前的条目,而无需再次向get服务器发送获取内容的请求。

在QTableView/QTableWidget中缓存数据的最佳方法是什么?

1)使用QTableView并动态创建QAbstractTableModel,然后将QAbstractTableModels保存在数组中。因此,每次用户更改列表框中的项时,我只需对相关的setModel项调用TableModel。有可能吗?如果是的话,怎么做?

2)使用QTableWidget,然后使用hashmap之类的方法存储每个列表框选择的所有数据,然后当用户在项之间切换时,清除QTableWidget并循环映射,每次添加项?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-04 07:48:52

在Qt模型/视图框架中,我们可以使用多态性。什么意思?我们可以很容易地使用一些容器来存储指向基类的指针(在我们的例子中是QAbstractItemModel),并在程序中的任何地方使用这个容器来获取模型或获取数据或setData等等。在我的例子中,我使用了QVector:

代码语言:javascript
运行
复制
QVector<QAbstractItemModel*> mdlVec;//in header (private section)

创建不同的模型并使用数据填充这些模型,但是将指针附加到我们的向量:

代码语言:javascript
运行
复制
 QStandardItemModel *ListModel = new QStandardItemModel;
 QStandardItem *its = new QStandardItem("just example");
 ListModel->setItem(0,its);
 mdlVec.append(ListModel);
 //...
 QDir dir("G:/2");
 QStringList dirContents = dir.entryList(QStringList(), QDir::Files);
 QStringListModel *mdl = new QStringListModel(dirContents,this);
 mdlVec.append(mdl);
 //and so on

接下来,我们创建一个连接到某个信号的插槽,它允许我们现在知道哪一行是当前的(例如,currentRowChanged中的QListWidget ):

代码语言:javascript
运行
复制
void MainWindow::on_listWidget_currentRowChanged(int currentRow)
{
    if(currentRow <= mdlVec.size())
        ui->tableView->setModel(mdlVec.at(currentRow));
}

我们可以轻松地设置新的数据,并使用模型做其他事情。还有一个例子:

代码语言:javascript
运行
复制
if(currentRow <= mdlVec.size())
{
    QAbstractItemModel *tmp = mdlVec.at(currentRow);
    tmp->setData(tmp->index(0,0),QString("%1 was changed").arg(currentRow+1));
    ui->tableView->setModel(mdlVec.at(currentRow));
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27762822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档