QTableView 和 predefined Models

本文介绍如何利用Qt的预定义模型(如QStringListModel、QStandardItemModel等)来有效地展示和操作常见数据结构。通过设置QTableView的属性,实现数据显示的自定义化,包括显示表线、调整列宽、获取表头、设置编辑状态和选择模式等。并通过实例展示了如何创建和填充QStandardItemModel模型,以及如何增加模型项。

Predefined Models

The typical way to use model/view is to wrap specific data to make it usable with view classes. Qt, however, also provides predefined models for common underlying data structures. If one of the available data structures is suitable for your application, a predefined model can be a good choice.

QStringListModel Stores a list of strings
QStandardItemModel Stores arbitrary hierarchical items
QFileSystemModel
QDirModel(obsolete)
Encapsulate the local file system
QSqlQueryModel Encapsulate an SQL result set
QSqlTableModel Encapsulates an SQL table
QSqlRelationalTableModel Encapsulates an SQL table with foreign keys
QSortFilterProxyModel Sorts and/or filters another model

QTableView
1.是否显示表格线 setShowGrid(true/false)
2.内容决定列的宽度 resizeColumnsToContents()
3.获取垂直表头 verticalHeader (),
4.获取水平表头 horizontalHeader()
5.默认情况下 QTableView是可以编辑的,设置为非编辑状态setEditTriggers(QTableView::NoEditTriggers)
 
6.模式设置选择,用户可以浏览到表中单独的单元格 setSelecttionMode(QAbstractItemView::SingleSelection)  
7.状态设置选择,用户浏览记录项时,整行都是高亮显示的 setSelectionBehavior(QAbstractItemView::SelectRows );
8.模型对象
此处以QStandardItemModel为例, 设置显示模型为4列,同时修改水平标题显示为自定义的中文显示
  1. <span style="font-size:13px;"> QStandardItemModel *model = new QStandardItemModel;   
  2.  model->setColumnCount(4);  
  3.  model->setHeaderData(0,Qt::Horizontal,tr("姓名"));  
  4.  model->setHeaderData(1,Qt::Horizontal,tr("性别"));  
  5.  model->setHeaderData(2,Qt::Horizontal,tr("年龄"));  
  6.  model->setHeaderData(3,Qt::Horizontal,tr("身高"));  
  7. </span>  

9.增加项到模型
  1. model->setData(model->index(0,0),tr("小明"));  
  2. model->setData(model->index(0,1),tr("男"));  
  3. model->setData(model->index(0,2),tr("20"));  
  4. model->setData(model->index(0,3),tr("180"));  

或者
  1. QStandardItem* item0 = new QStandardItem(tr("小明"));  
  2. QStandardItem* item1 = new QStandardItem(tr("男"));  
  3. QStandardItem* item2 = new QStandardItem(tr("20"));  
  4. QStandardItem* item3 = new QStandardItem(tr("180"));  
  5. QList<QStandardItem*> items;  
  6. items << item1 << item2 << item3 << item4;  
  7. model->appendRow(items);  
航拍图像多类别实例分割数据集 一、基础信息 • 数据集名称:航拍图像多类别实例分割数据集 • 图片数量: 训练集:1283张图片 验证集:416张图片 总计:1699张航拍图片 • 训练集:1283张图片 • 验证集:416张图片 • 总计:1699张航拍图片 • 分类类别: 桥梁(Bridge) 田径场(GroundTrackField) 港口(Harbor) 直升机(Helicopter) 大型车辆(LargeVehicle) 环岛(Roundabout) 小型车辆(SmallVehicle) 足球场(Soccerballfield) 游泳池(Swimmingpool) 棒球场(baseballdiamond) 篮球场(basketballcourt) 飞机(plane) 船只(ship) 储罐(storagetank) 网球场(tennis_court) • 桥梁(Bridge) • 田径场(GroundTrackField) • 港口(Harbor) • 直升机(Helicopter) • 大型车辆(LargeVehicle) • 环岛(Roundabout) • 小型车辆(SmallVehicle) • 足球场(Soccerballfield) • 游泳池(Swimmingpool) • 棒球场(baseballdiamond) • 篮球场(basketballcourt) • 飞机(plane) • 船只(ship) • 储罐(storagetank) • 网球场(tennis_court) • 标注格式:YOLO格式,包含实例分割的多边形坐标,适用于实例分割任务。 • 数据格式:航拍图像数据。 二、适用场景 • 航拍图像分析系统开发:数据集支持实例分割任务,帮助构建能够自动识别分割航拍图像中各种物体的AI模型,用于地理信息系统、环境监测等。 • 城市
### Qt QTableView Compatible Models #### Overview of Models Supported by QTableView In the context of Qt, `QTableView` is designed to work seamlessly with various model classes that adhere to the Model/View framework principles[^2]. The most commonly used models include: - **QStandardItemModel**: A general-purpose, tree-based model that can be used as a standard table or list store. - **QStringListModel**: Specialized for handling lists of strings. - **QSqlQueryModel**, **QSqlTableModel**, and **QSqlRelationalTableModel**: These are specialized SQL database query result set models which allow displaying data from databases directly within views like `QTableView`. For custom scenarios where predefined models do not suffice, developers may implement their own models derived from either `QAbstractItemModel`, `QAbstractListModel`, or `QAbstractTableModel`. Custom implementations must provide methods such as rowCount(), columnCount(), data(), headerData() among others depending on requirements. Here's an example demonstrating how one might use `QStandardItemModel` alongside `QTableView`: ```cpp #include <QApplication> #include <QTableView> #include <QStandardItemModel> int main(int argc, char *argv[]) { QApplication app(argc, argv); // Create view widget QTableView tableView; // Initialize item model QStandardItemModel model(4, 2); // Four rows and two columns // Populate some items into our model for (int row = 0; row < 4; ++row){ for (int col = 0; col < 2; ++col){ QModelIndex index = model.index(row, col); QString text = QString("Row%1 Col%2").arg(QString::number(row)).arg(QString::number(col)); model.setData(index,text,QTableWidgetItem::DisplayRole); } } // Set up connections between widgets tableView.setModel(&model); // Show window containing tableview tableView.show(); return app.exec(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值