QTableView详细使用说明

  • 创建QTableView
  • 表格标题
    • 设置表格的标题
    • 获取表格的标题
  • 数据操作
    • 插入数据
    • 删除数据
  • 属性设置
    • 设置表格的对齐方式
    • 设置表格的宽高
    • 设置表格的线属性
  • 自定义菜单
    • eventFilter方法
      • 重载eventFilter()
      • 启用事件监听
      • 实现事件过滤函数
    • 设置菜单属性方法
      • 设置属性
      • 关联信号槽

创建QTableView

QTableView是一种View/Model模式在创建QTableView表格的时,除了创建QTableView对象还需要创建对应的Model对象,Model对象负责表格中的数据单元添加、单元格删除和设置表格标题等操作,一般常见的就是QStandardItemModel模型。

使用时需要包含#include <QTableView>#include <QStandardItemModel>,创建一个QTableView对象和QStandardItemModel并使用QTableViewsetModel()函数将视图和模型对象进行绑定。下面以继承QTableView为示例,代码如下所示:

// .h
#include <QTableView>
#include <QStandardItemModel>class DBTableView: public QTableView
{public:explicit DBTableView(QWidget * _parent_widget = nullptr);~DBTableView() override;private:QStandardItemModel*                             db_table_model_;
};// .cpp
#include "db_table_view.h"DBTableView::DBTableView(QWidget *_parent_widget): QTableView(_parent_widget)
{db_table_model_ = new QStandardItemModel();setModel(db_table_model_);
}DBTableView::~DBTableView()
{}

表格标题

设置表格的标题

表格最重要的就是标题对于一个表格控件而言标题分为水平标题垂直标题,可以使用model对象提供的setHorizontalHeaderLabels()函数和setVerticalHeaderLabels()函数进行表格标题的设置,前者是对水平标题的设置而后者是对垂直标题的设置,示例代码和效果如下所示:

DBTableView::DBTableView(QWidget *_parent_widget): QTableView(_parent_widget)
{// ......QStringList table_h_headers;table_h_headers << "设施ID" << "设施名称" << "设施等级" << "人员配置"<< "数据采集日期";db_table_model_->setHorizontalHeaderLabels(table_h_headers);QStringList table_v_headers;table_v_headers << "测试1" << "测试2" << "测试3" << "测试4"<< "测试5";db_table_model_->setVerticalHeaderLabels(table_v_headers);
}

表格控件上的所有单元格都是item对象表格标题也不例外,因此可以单独创建item对象然后通过modelsetHorizontalHeaderItem()函数和setVerticalHeaderItem()函数依次对表格进行的标题进行设置,示例代码如下:

DBTableView::DBTableView(QWidget *_parent_widget): QTableView(_parent_widget)
{// ......QStringList table_h_headers;table_h_headers << "设施ID" << "设施名称" << "设施等级" << "人员配置"<< "数据采集日期";for (int index = 0; index < table_h_headers.count(); ++index) {QStandardItem * header_item = new QStandardItem(table_h_headers[index]);db_table_model_->setHorizontalHeaderItem(index, header_item);}
}

这种做法适用于对表格标题需要添加一些数据的时候,例如,当前的模型描述的数据库中的数据表,标题的显示文字可以写成中文,然后将其对应的数据库字段作为附加信息通过setData()函数写道对象中,示例代码如下:

#include "db_table_view.h"#define DATABASE_FIELD_CODE         Qt::UserRole + 100DBTableView::DBTableView(QWidget *_parent_widget): QTableView(_parent_widget)
{// ......QStringList table_h_headers;table_h_headers << "设施ID" << "设施名称" << "设施等级" << "人员配置"<< "数据采集日期";QStringList table_h_fields;table_h_fields << "id" << "name" << "level" << "config"<< "date";for (int index = 0; index < table_h_headers.count(); ++index) {QStandardItem * header_item = new QStandardItem(table_h_headers[index]);header_item->setData(table_h_fields[index], DATABASE_FIELD_CODE);db_table_model_->setHorizontalHeaderItem(index, header_item);}
}

获取表格的标题

设置表格标题后就是获取标题内容,可以通过modelcolumnCount()函数获取数量,配合modelheaderData()函数获取当前列的文字内容,示例代码如下:

DBTableView::DBTableView(QWidget *_parent_widget): QTableView(_parent_widget)
{// ......QStringList table_h_headers;table_h_headers << "设施ID" << "设施名称" << "设施等级" << "人员配置"<< "数据采集日期";db_table_model_->setHorizontalHeaderLabels(table_h_headers);for (int index = 0; index < db_table_model_->columnCount(); ++index) {qInfo() << db_table_model_->headerData(index, Qt::Horizontal, Qt::DisplayRole).toString();}
}

headerData()的第一个参数是列的索引号,第二个参数是获取水平方向还是垂直方向的表头,第三个参数是模型数据编号,该编号与setData()函数在设置时的一致,而这里使用的Qt::DisplayRole是内置的一个编号,用于获取显示的文字内容。

数据操作

插入数据

设置好标题后就可以对表格进行添加数据了,可以使用modelsetItem()函数和appendRow()函数,其中setItem()函数需要指定设置的行和列,而appendRow()函数可以先将一行item的对象添加一个list中然后一次性插入,示例代码如下:

DBTableView::DBTableView(QWidget *_parent_widget): QTableView(_parent_widget)
{// ......db_table_model_->setItem(0, 0, new QStandardItem("1"));db_table_model_->setItem(0, 1, new QStandardItem("2"));db_table_model_->setItem(0, 2, new QStandardItem("3"));db_table_model_->setItem(0, 3,new QStandardItem("4"));db_table_model_->setItem(0, 4,new QStandardItem("5"));QList<QStandardItem*> add_items;for (int index = 0; index < table_h_headers.count(); ++index) {add_items << new QStandardItem(QString::number(index));}db_table_model_->appendRow(add_items);
}

删除数据

删除数据时同样也是依赖model对象,model对象提供了一个clear()函数,该函数可以一次将表格内容和表格标题都删掉,如果只是想将表格内容清空则可以使用modelrowCount()函数配合modelremoveRows()函数完成,示例代码如下:

DBTableView::DBTableView(QWidget *_parent_widget): QTableView(_parent_widget)
{// ......db_table_model_->removeRows(0, db_table_model_->rowCount());
}

删除某一列数据可以使用modelremoveColumn()函数,示例如下:

DBTableView::DBTableView(QWidget *_parent_widget): QTableView(_parent_widget)
{// ......db_table_model_->removeColumn(0);
}

属性设置

对于表格而言可以对其样式进行调整,常见的设置如下:

设置表格的对齐方式

horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
verticalHeader()->setDefaultAlignment(Qt::AlignBottom);

设置表格的宽高

// 固定表格宽度不可扩展,不可手动调整宽度
horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
// 表格宽度随内容自动扩展
horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
// 表格宽度自动根据UI进行计算,不可手动调整宽度
horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);// 固定表格高度不可扩展,不可手动调整高度
verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
// 表格高度随内容自动扩展
verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
// 表格高度自动根据UI进行计算,不可手动调整高度
verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);

设置表格的线属性

// 隐藏网格线
setShowGrid(false);
// 显示网格线
setShowGrid(true);
// 线的样式
setGridStyle(Qt::DotLine);

自定义菜单

eventFilter方法

重载eventFilter()

对于表格控件常见的操作就是弹出菜单,当鼠标点击控件时会触发一个QEvent::ContextMenu类型的事件,通过重载eventFilter()事件过滤器函数,并捕获该类型事件来实现菜单的弹出,具体步骤如下:

// .h
// ......
#include <QEvent>
#include <QMenu>class DBTableView: public QTableView
{Q_OBJECT// ......
protected:bool eventFilter(QObject *object, QEvent *event) override;
};

启用事件监听

// .cpp
DBTableView::DBTableView(QWidget *_parent_widget): QTableView(_parent_widget)
{// ......installEventFilter(this);}

实现事件过滤函数

bool DBTableView::eventFilter(QObject *object, QEvent *event) {if(object == this  &&  event->type() == QEvent::ContextMenu) {if(currentIndex().isValid()) {QMenu * menu = new QMenu();menu->addAction("添加数据");menu->addAction("删除数据");QAction * action = menu->exec(cursor().pos());    // 弹出菜单if (action->text().compare("删除数据") == 0) {db_table_model_->removeRow(currentIndex().row());}}}return QAbstractItemView::eventFilter(object, event);
}

效果如下:

设置菜单属性方法

除了直接监听eventFilter之外还有一个简单一些的方式调用QTableView的setContextMenuPolicy()函数,示例代码如下:

设置属性

void TestTable::initUI() {QTableView * table_view = new QTableView();table_view->setContextMenuPolicy(Qt::CustomContextMenu);
}

关联信号槽

在创建完QTableView对象后设置使用自定义菜单策略,然后进行信号槽关联,示例代码如下:

void TestTable::tableViewMenu(const QPoint & _pos) {// 相应数据处理
}void TestTable::initUI() {// ......connect(table_view, &QTableView::customContextMenuRequested, this, &TestTabel::tableViewMenu);
}

QTableView详细使用说明相关推荐

  1. python表格控件_python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例...

    PyQt5表格控件QTableView简介 在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到QTableView类了,在QTableView中可以使用自定义的 ...

  2. unix命令的一般格式是_Linux tree 命令详细使用说明

    请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要讲解Linux系统上的tree命令的详细使用方 ...

  3. Kibana可视化管理页面详细使用说明

    Kibana可视化管理页面详细使用说明 使用浏览器访问 ip:5601 默认端口,进入首页 Discover:日志管理视图  主要进行搜索和查询 Visualize:统计视图      构建可视化的图 ...

  4. 博途PLC滤波指令 Filter_PT1、Filter_PT2、Filter_DT1详细使用说明(含Simulink+博途PLC仿真)

    博途S7-1200/1500PLC的PID控制和详细使用说明,请参看下面的文章链接,这里不再赘述.

  5. python gui 显示表格_python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例...

    PyQt5表格控件QTableView简介 在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到QTableView类了,在QTableView中可以使用自定义的 ...

  6. Ftrace debugfs接口详细使用说明

    文章目录 Ftrace debugfs接口详细使用说明 1. 概述 2. 实现原理及代码 3. Function 跟踪 3.1 Trace文件系统 3.2 Tracers 3.3 Error cond ...

  7. LATTICE下载器hw-usbn-2A 2B软件下载驱动安装diamond和ISPVM下载详细使用说明

    LATTICE下载器hw-usbn-2A 2B diamond和ISPVM下载使用说明 本文详细介绍(图文)如何使用lattice的diamond和ISPvm来下载程序. 可以用来下载的lattice ...

  8. nginx的详细使用说明(下)

    2019独角兽企业重金招聘Python工程师标准>>> 1.gzip_comp_levle 设置gzip压缩等级,等级越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大 pa ...

  9. cookies的详细使用说明

    一.什么是cookies? 大家都知道,浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭 与该用户的连接.因此当一个请求发送到 ...

  10. Qt GUI图形图像开发之QT表格控件QTableView详细使用方法与实例

    QT表格控件QTableView简介 ​ 表格视图控件QTableView,需要和QStandardItemModel, 配套使用,这套框架是基于MVC设计模式设计的,M(Model)是QStanda ...

最新文章

  1. java joptionpane调整大小_JAVA应用性能监控之JVM层GC调优
  2. Jquery实现点击页面发送弹幕效果
  3. java屏蔽关键字_替换禁用语(指定关键字)的过滤器
  4. 我们团队设计的一个基于微服务的高并发服务器架构
  5. 不能读取文件“itunes.library.itl”因为它是由更高级别的itunes所创建的
  6. 规范白盒生态 S³IP助力未来可预期服务网络
  7. java中的关键字有哪些_Java关键字有哪些?
  8. php生成静态html分页实现方法
  9. Python按元组中第一个字符串升序第二个字符串降序排序
  10. PHP中json_encode 中文解决方法
  11. PHPKafka 1.0 发布,支持全部 50 个 API
  12. SQL Server从入门到精通(三)
  13. 零起点学习Linux系列培训视频-寒冰作品
  14. 2048游戏 JavaScript实现
  15. 百度任玉刚写的对学习Android的理解
  16. 米思齐——简易呼吸灯
  17. nvme分区选mbr还是guid_老毛桃winpe的DiskGenius分区工具使用说明
  18. Nacos 2.0原理解析(一):Distro协议
  19. 互联网日报 | 1月10日 星期日 | 小米之家千店同开;蔚来发布首款旗舰轿车ET7;LVMH完成收购Tiffany...
  20. HANA数据库备份脚本案例(刘欣)

热门文章

  1. 利用ZEBAR 软件生成ZPL 代码
  2. 台达服务器电源原理电路图,详细解析开关电源电路:工作原理,电路组成,电路图...
  3. 从零开始学习Java的简单步骤和方法技巧
  4. 视频教程-鼎捷易飞ERP视频教程-ERP
  5. 机器人弹性伸缩算法-专利技术交底书
  6. 文件同步备份工具—Second Copy
  7. 手机HiFi嗨不嗨 看完这些才能算是入坑
  8. PhpQuery PHP操作HTML类,PHP操作XML类,PHP操作Dom类
  9. 超好用的网站克隆工具,就是玩
  10. Django 中文文档解析