QTableView基本用法讲解,Qt表格控件的使用方法
QTableView是Qt中用来把数据集以表格形式提供给用户的一个控件,它与C++Builder中的DBGrid作用类似。坦白的说,DBGrid的使用要比QTableView更容易一些。但QTableView在使用麻烦的同时,也提供了更多的灵活性。 一、添加表头:
- QStandardItemModel *model = new QStandardItemModel();
- model->setColumnCount(2);
- model->setHeaderData(0,Qt::Horizontal,QString::fromLocal8Bit("卡号"));
- model->setHeaderData(1,Qt::Horizontal,QString::fromLocal8Bit("姓名"));
复制代码
二、设置表格属性:
- ui->tableView->setModel(model);
- //表头信息显示居左
- ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
- //设置列宽不可变
- ui->tableView->horizontalHeader()->setResizeMode(0,QHeaderView::Fixed);
- ui->tableView->horizontalHeader()->setResizeMode(1,QHeaderView::Fixed);
- ui->tableView->setColumnWidth(0,101);
- ui->tableView->setColumnWidth(1,102);
复制代码
注:在进行表格设置时必须是“ui->tableView->setModel(model);”在前,属性具体设置在后, 反之则设置不会生效。如上述代码所示。 三、添加行(添加三行一样的信息):
- for(int i = 0; i < 3; i++)
- {
- model->setItem(i,0,new QStandardItem("2009441676"));
- //设置字符颜色
- model->item(i,0)->setForeground(QBrush(QColor(255, 0, 0)));
- //设置字符位置
- model->item(i,0)->setTextAlignment(Qt::AlignCenter);
- model->setItem(i,1,new QStandardItem(QString::fromLocal8Bit("哈哈")));
- }
复制代码
四、删除行:
- //x是指定删除哪一行
- model->removeRow(x);
- //删除所有行
- model->removeRows(0,model->rowCount());
复制代码
再举一个例子: 在一个药品划价模块中有这样的操作流程: 检索处方项目成功后,把该项目显示到QTableView里,把需要编辑的数量字段提供给用户输入,用户输入确认后,该项目留在列表中,然后开始下一项目检索录入。 实现过程如下: 录入的项目保留在临时表tmp中,界面上的QTableView取名为tbList,与tbList关联的Model取名为tb1。检索成功后,把检索结果插入到临时表中,把需要编辑的字段提供给用户。
- tb1=newQSqlTableModel(this,*dbR); //dbR是本应用中的数据源
- tb1->setTable("tmp"); //处方临时表
复制代码
程序中需要显示的时候,
- tbList->setModel(NULL); //清除原先数据集
- tbList->setModel(tb1); //刷新显示
复制代码
程序中需要提供编辑输入的时候
- QModelIndexmdidx=m_ui->tbList->model()->index(row,column); //获得需要编辑的单元格的位置
- m_ui->tbList->setFocus(); //把输入焦点交给tbList
- m_ui->tbList->setCurrentIndex(mdidx); //设定需要编辑的单元格
- m_ui->tbList->edit(mdidx); //开始编辑
复制代码
有一个问题需要注意。向QTableView中添加记录时,字段一定要完整,不能有空白字段,否则结果无法保存。切记。 如果需要对用户输入做限制,比如只能在指定的字段输入指定的数据类型,可以通过QItemDelegate来实现。 贴一段代码,说明QTableView基本用法
- QStandardItemModel model;
- //设置大小
- model.setColumnCount(3); //列
- model.setRowCount(musicFound); //行
- //设置标题
- model.setHeaderData(0,Qt::Horizontal,"ID");
- //添加数据
- for(int j=0;j<row;j++)
- {
- //写id
- QStandardItem *itemID = new QStandardItem("hello");//QString::number(j)));
- model.setItem(j,0,itemID);
- }
- //选择这个model
- m_ui->tableView->setModel(&model);
- //隐藏左边那列
- m_ui->tableView->verticalHeader()->hide();
- //列宽
- m_ui->tableView->setColumnWidth(0,30);
- //整行选择
- m_ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
本文链接:
https://blog.csdn.net/imxiangzi/article/details/49204817
其经常使用的函数有
1.显示格子 setShowGrid(false);
2.由内容调整列 resizeColumnsToContents();
3.获取垂直表头 verticalHeader();
当然还有水平表头 4.设置非编辑状态 verticalView->setEditTriggers(QTableView::NoEditTriggers); 5.设置点击行为 verticalView->setSelectionBehavior(QTableView::SelectRows); 6.模型对象 QStandardItemModel *model = new QStandardItemModel; model->setColumnCount(4); model->setHeaderData(0,Qt::Horizontal,tr("File")); model->setHeaderData(1,Qt::Horizontal,tr("Path")); model->setHeaderData(2,Qt::Horizontal,tr("Size")); model->setHeaderData(3,Qt::Horizontal,tr("Duration")); 设置显示模型为4列 7.增加项到模型 QStandardItem* item1 = new QStandardItem(tr("Yesterday Once More.mid")); QStandardItem* item2 = new QStandardItem(tr("C://Mid//")); QStandardItem* item3 = new QStandardItem(tr("0.001M")); QStandardItem* item4 = new QStandardItem(tr("3:48")); QList<QStandardItem*> item; item << item1 << item2 << item3 << item4; model->appendRow(item); 8.设置模型到View setModel(model);
本文链接:
https://www.xuebuyuan.com/1895740.html
我的测试验证代码:qtguiapplication3.cpp
#include "qtguiapplication3.h"
#include <qstandarditemmodel.h>
QtGuiApplication3::QtGuiApplication3(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
QStandardItemModel *model = new QStandardItemModel;
model->setColumnCount(4);
ui.tableView->setModel(model);
model->setHeaderData(0, Qt::Horizontal, QString("File"));
model->setHeaderData(1, Qt::Horizontal, QString("Path"));
model->setHeaderData(2, Qt::Horizontal, QString("Size"));
model->setHeaderData(3, Qt::Horizontal, QString("Duration"));
for (int i = 0; i < 3; i++)
{
model->setItem(i, 0, new QStandardItem("2009441676"));
//设置字符颜色
model->item(i, 0)->setForeground(QBrush(QColor(255, 0, 0)));
//设置字符位置
model->item(i, 0)->setTextAlignment(Qt::AlignCenter);
model->setItem(i, 1, new QStandardItem(QString::fromLocal8Bit("哈哈")));
}
ui.tableView->setColumnWidth(0, 100);
ui.tableView->setColumnWidth(1, 50);
ui.tableView->setColumnWidth(2, 80);
ui.tableView->setColumnWidth(3, 80);
}
运行结果:
- [Intellij IDEA]File size exceeds configured limit
- 那些年Struts 1.X 而今我还是不会
- 关于MySQL DNS解析探究之一:DNS解析确实在起作用
- 每一个程序员需要了解的10个Linux命令
- 实战案例 | 使用机器学习和大数据预测心脏病
- 关于JVM直接内存触发Full GC
- 极客DIY:通过树莓派发送摩斯码
- Hadoop SequnceFile.Writer 压缩模式及压缩库浅析
- Thrift抛直接内存OOM一点解决思路
- 小顶堆Java实现
- Tomcat源码分析一:源码导入
- 如何使用Metasploit对安卓手机进行控制
- 关于MySQL DNS解析探究之二:unauthenticated user
- Thrift Direct Memory OOM问题解决方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 技术干货 | Docker 容器逃逸案例汇集
- 一张千万级别数据的表想做分页,如何优化?
- 一文学会爬虫技巧
- 为什么机器学习应用交易那么难(中)
- 消息队列的消费幂等性如何保证
- js中数组Array.reduce方法介绍及使用场景
- 推荐一套基于go开发的文档管理系统
- 如何通过容器搭建稳定可靠的私有网盘(NextCloud)
- Flutter实现倒计时功能
- Excelize 2.3.0 发布, Go 语言 Excel 基础库
- 网站渗透攻防Web篇之SQL注入攻击高级篇
- 网站渗透攻防Web篇之SQL注入攻击中级篇
- Go 语言学习之 method
- 网站渗透攻防Web篇之SQL注入攻击初级篇
- VBA解析复合文档05——读取数据流