QTableView/QTableWidget 缓存不同的视图
QTableView/QTableWidget caching different views
我正在编写一个应用程序,该应用程序可以在QTableView/QTableWidget中读取和显示来自Web服务器的数据。每个条目将有几列,并且还有 SetData 来保存每个条目中的隐藏信息(来自 UI)(QVariant)。
关键是,QTableView/QTableWidget 的内容会根据用户从 ListBox 中选择的内容而变化,因此每次 ListBox 选择更改时,QTableView/QTableWidget 中的所有条目都将被清除,并显示与之相关的项目。
我想缓存用户单击的列表框项目的所有条目,因此如果用户返回到同一项目,只需在QTableView/QTableWidget中显示以前的条目,而无需再次向Web服务器发送请求以获取内容。
缓存数据以显示在 QTableView/QTableWidget 中的最佳方法是什么?
1)使用QTableView并动态创建QAbstractTableModel,然后将QAbstractTableModels保存在数组中。因此,每次用户更改列表框中的项时,我都会在相关的表模型项上调用 setModel。可能吗?如果是这样,怎么办?
2)使用QTableWidget,然后使用hashmap之类的东西来存储每个列表框选择的所有数据,然后当用户在项目之间切换时,清除QTableWidget并循环映射并每次添加项目?
在Qt模型/视图框架中,我们可以使用多态性。什么意思?我们可以轻松地使用一些容器来存储指向基类的指针(在我们的例子中QAbstractItemModel
),并在程序中的每个位置使用此容器来获取模型或获取数据或 setData 等。在我的示例中,我使用了QVector:
QVector<QAbstractItemModel*> mdlVec;//in header (private section)
创建不同的模型并用数据填充这些模型,但将指针附加到我们的向量:
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
接下来,我们创建连接到某个信号的插槽,这使我们能够知道哪一行现在是当前的(例如QListWidget
currentRowChanged
):
void MainWindow::on_listWidget_currentRowChanged(int currentRow)
{
if(currentRow <= mdlVec.size())
ui->tableView->setModel(mdlVec.at(currentRow));
}
我们可以轻松地设置新数据并使用模型做其他事情。再举一个例子:
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));
}
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 视图中的参数推导失败:take_while
- cmake更新缓存的变量
- 试图对缓存进行跨步测试,但程序并没有结束
- 如何维护资源管理器项目视图中当前可见的项目列表
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 通过ccmake在cmake中缓存依赖选项
- 在另一个类视图中添加最多2个图表的正确方法是什么
- OpenVR:向视图方向移动
- 使用 WIN32 API (C/C++) 对特定树视图项进行着色
- 将所选值(通过视图)从 boost::multi_array 复制到另一个数组 (C++)
- 如何在不使用滚动条的情况下使视图更改
- 列表视图更改选择颜色
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用宏扩展的泛型:为什么指令缓存使用不当?
- 如何使缓存线程安全
- 在 Qml 中从 QSqlTableModel 中删除单行时视图不一致
- 存储指令是否会阻止缓存未命中的后续指令?
- 如何在基于 Windows 8 Xaml 的列表视图中禁用缓存
- QTableView/QTableWidget 缓存不同的视图