QSqlQueryModel只读,QSqlTableModel可以编辑,QDataWidgetMapper可以将字段的值和控件的值进行映射
listmodel中行,tablemodel行列,treemodel中行列和父节点
QModelIndex index1 = table_model->index(row,column,QModelIndex());//表格父节点为空
QModelIndex index2 = tree_model->index(row,column,index2);//树有父节点
QSqlQuery::size()
仅在使用了 QSqlQuery::exec()
后并且查询结果集的所有行都被读取时才有效。如果结果集很大或在使用游标的情况下,返回的行数可能不准确。
setText()
- 用途:
setText()
是QStandardItem
类的一个方法,用于设置某个单元格中的文本内容。 - 使用场景:当你想修改某个
QStandardItem
的显示文本时,可以使用setText()
。 setText()
仅修改显示文本,相当于setData(text, Qt::DisplayRole)
。
setData()
- 用途:
setData()
是QAbstractItemModel
类的一个通用方法,可以设置模型中任意角色(role)的数据。可以用于修改文本、图标、工具提示等各种数据。 - 使用场景:如果你想更灵活地修改模型中的数据,可以使用
setData()
,它允许你指定角色(如Qt::DisplayRole
,Qt::ToolTipRole
,Qt::DecorationRole
等),不仅限于文本内容。 - setData
()
修改用户数据,相当于setData(
value,
Qt::UserRole + 1)
。
text()
- 用途:
text()
是QStandardItem
类中的方法,用于获取某个单元格的显示文本。这相当于从Qt::DisplayRole
角色中获取数据。 - 局限性:
text()
只能获取显示文本,不能获取其他角色(如图标、工具提示等)的数据。 text()
本质上等同于调用item->data(Qt::DisplayRole).toString()
。
DisplayRole
(0): 显示文本,用于用户界面中显示的字符串内容。setText()
其实就是对DisplayRole
的一种简化操作。DecorationRole
(1): 装饰物,如图标或图片,用于项的装饰(如列表项前面的图标)。EditRole
(2): 编辑模式下的值,通常与DisplayRole
相同,但可以为编辑模式设置不同的值。ToolTipRole
(3): 项的工具提示,在用户悬停时显示的文本。StatusTipRole
(4): 状态提示,在状态栏中显示的提示信息。WhatsThisRole
(5): “这是什么”提示,用于更详细的帮助信息。FontRole
(6): 显示文本的字体。TextAlignmentRole
(7): 文本对齐方式,如左对齐、右对齐等。BackgroundRole
(8): 项的背景颜色。ForegroundRole
(9): 项的前景色(文本颜色)。CheckStateRole
(10): 复选框的状态(选中、未选中、部分选中)。AccessibleTextRole
(11): 无障碍文本,用于无障碍访问技术。AccessibleDescriptionRole
(12): 无障碍描述。SizeHintRole
(13): 项的大小提示,用于布局管理。UserRole
(0x0100): 用户自定义角色,用于存储用户定义的附加数据。
Qt::UserRole + 1000
:Qt::UserRole
是一个基础角色,值为 0x0100
(256)。你使用 Qt::UserRole + 1000
是为了创建一个自定义的角色,并确保它不会与 Qt 内置的角色冲突。
QModelIndex
QModelIndex
是一个用于引用模型中某个特定单元格的对象。它不存储实际的数据,而是用来标识和操作模型中的某个位置。它包含信息,如行、列和一个指向所属模型的指针,用来告诉视图或控制器哪个数据发生了变化。
QModelIndex
的主要用途:
- 索引模型中的单元格:它指向模型中的某个位置,而不是存储数据本身。
- 传递数据位置:比如,当你在
QTableView
中点击某个单元格时,视图可以通过QModelIndex
知道你点击了哪一个单元格。 - 在信号槽中使用:许多 Qt 信号和槽函数使用
QModelIndex
来标识触发信号的位置。
QModelIndex
的常见函数:
row()
:返回索引的行号。column()
:返回索引的列号。parent()
:返回该索引的父级索引(如果是树形结构模型)。data()
:通过这个索引从模型中获取数据。
QStandardItem
每个 QStandardItem
代表模型中的一个单元格或一项,能够直接存储数据和属性。
QStandardItem
的主要用途:
- 存储实际的数据:它存储的是模型中的数据,比如显示文本、编辑值、工具提示、复选框状态等。
- 树形结构:一个
QStandardItem
还可以拥有子项,从而形成树形结构模型。
QStandardItem
的常见函数:
setData()
:设置项的数据。data()
:获取项的数据。setCheckable()
:设置是否显示复选框。setEditable()
:设置是否可以编辑该项。appendRow()
:向该项添加子项,形成树形结构
QStandardItemModel添加序号列
1.在 SQL 查询中插入列
SELECT ROW_NUMBER() OVER () AS seq, column1, column2
FROM your_table;
需要更新界面去更新model,view会自动更新。
QListModel
1.使用
m_strList<<"北京"<<"上海"<<"天津"<<"河北"<<"山东"<<"四川"<<"重庆"<<"广东"<<"河南";
m_model = new QStringListModel(this);
m_model->setStringList(m_strList);
ui->listView->setModel(m_model);
2. 插入项
QModelIndex currentIndex = ui->listView->currentIndex();
m_model->insertRow(currentIndex.row());
m_model->setData(currentIndex,"new insert item",Qt::DisplayRole);
QModelIndex index = m_model->index(currentIndex.row()+1);
ui->listView->setCurrentIndex(index);
3. 添加项
m_model->insertRow(m_model->rowCount());
QModelIndex index = m_model->index(m_model->rowCount()-1);
m_model->setData(index,"new append item",Qt::DisplayRole);
ui->listView->setCurrentIndex(index);
4. 删除项
从0开始,到截至数量
m_model->removeRows(0,m_strList.count());
5. 上移
QModelIndex index = ui->listView->currentIndex();
m_model->moveRow(QModelIndex(),index.row(),QModelIndex(),index.row()-1);
QFileSystemModel
QString path1 = qApp->applicationDirPath(); //debug文件夹
QString path2 = qApp->applicationFilePath();//app.exe的文件
QString dirPath = QDir::currentPath(); //debug 文件夹
QString rootPath = QDir::rootPath(); // C:/
QString homePath = QDir::homePath();//C:/Users/Administrator
QString tempPath = QDir::tempPath();//C:/Users/Administrator/AppData/Local/Temp
// QString path = QFileDialog::getExistingDirectory(this,"打开存在的目录",qApp->applicationFilePath(),QFileDialog::ShowDirsOnly);
QString path = QFileDialog::getExistingDirectory(this,"打开存在的目录",QDir::currentPath(),QFileDialog::ShowDirsOnly);
// QString filter = "Zip Files(*.zip)";
// QString file_path = QFileDialog::getOpenFileName(this,"打开过滤后的文件",qApp->applicationDirPath(),filter);
ui->splitter->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
m_model = new QFileSystemModel(this);
ui->treeView->setModel(m_model); //设置数据模型
ui->listView->setModel(m_model); //设置数据模型
ui->tableView->setModel(m_model); //设置数据模型
// m_model->setRootPath(""); //没有区别,仅是触发
m_model->setRootPath(QDir::currentPath());
ui->treeView->setRootIndex(m_model->index(QDir::currentPath()));
文件设置过滤
m_model->setNameFilterDisables(!checked);
QStringList filter=flts.split(";",Qt::SkipEmptyParts);
m_model->setNameFilters(filter);
QString filePath = m_model->filePath(index);
QString type = m_model->type(index);
QString fileName = m_model->fileName(index);
QSqlTableModel
视图想展示更多内容
↓
模型:canFetchMore() → true?
↓
是 → 视图自动调用 fetchMore()
↓
模型加载数据(fetchMore),并插入新数据
↓
视图自动刷新显示