专栏首页CSharp编程大全QTableView基本用法讲解,Qt表格控件的使用方法

QTableView基本用法讲解,Qt表格控件的使用方法

QTableView是Qt中用来把数据集以表格形式提供给用户的一个控件,它与C++Builder中的DBGrid作用类似。坦白的说,DBGrid的使用要比QTableView更容易一些。但QTableView在使用麻烦的同时,也提供了更多的灵活性。   一、添加表头:

  1. QStandardItemModel *model = new QStandardItemModel();
  2. model->setColumnCount(2);
  3. model->setHeaderData(0,Qt::Horizontal,QString::fromLocal8Bit("卡号"));
  4. model->setHeaderData(1,Qt::Horizontal,QString::fromLocal8Bit("姓名"));

复制代码

  二、设置表格属性:

  1. ui->tableView->setModel(model);
  2. //表头信息显示居左
  3. ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
  4. //设置列宽不可变
  5. ui->tableView->horizontalHeader()->setResizeMode(0,QHeaderView::Fixed);
  6. ui->tableView->horizontalHeader()->setResizeMode(1,QHeaderView::Fixed);
  7. ui->tableView->setColumnWidth(0,101);
  8. ui->tableView->setColumnWidth(1,102);

复制代码

 注:在进行表格设置时必须是“ui->tableView->setModel(model);”在前,属性具体设置在后,   反之则设置不会生效。如上述代码所示。   三、添加行(添加三行一样的信息):

  1. for(int i = 0; i < 3; i++)
  2. {
  3. model->setItem(i,0,new QStandardItem("2009441676"));
  4. //设置字符颜色
  5. model->item(i,0)->setForeground(QBrush(QColor(255, 0, 0)));
  6. //设置字符位置
  7. model->item(i,0)->setTextAlignment(Qt::AlignCenter);
  8. model->setItem(i,1,new QStandardItem(QString::fromLocal8Bit("哈哈")));
  9. }

复制代码

  四、删除行:

  1. //x是指定删除哪一行
  2. model->removeRow(x);
  3. //删除所有行
  4. model->removeRows(0,model->rowCount());

复制代码

再举一个例子:   在一个药品划价模块中有这样的操作流程:   检索处方项目成功后,把该项目显示到QTableView里,把需要编辑的数量字段提供给用户输入,用户输入确认后,该项目留在列表中,然后开始下一项目检索录入。   实现过程如下:   录入的项目保留在临时表tmp中,界面上的QTableView取名为tbList,与tbList关联的Model取名为tb1。检索成功后,把检索结果插入到临时表中,把需要编辑的字段提供给用户。

  1. tb1=newQSqlTableModel(this,*dbR); //dbR是本应用中的数据源
  2. tb1->setTable("tmp"); //处方临时表

复制代码

  程序中需要显示的时候,

  1. tbList->setModel(NULL); //清除原先数据集
  2. tbList->setModel(tb1); //刷新显示

复制代码

  程序中需要提供编辑输入的时候

  1. QModelIndexmdidx=m_ui->tbList->model()->index(row,column); //获得需要编辑的单元格的位置
  2. m_ui->tbList->setFocus(); //把输入焦点交给tbList
  3. m_ui->tbList->setCurrentIndex(mdidx); //设定需要编辑的单元格
  4. m_ui->tbList->edit(mdidx); //开始编辑

复制代码

  有一个问题需要注意。向QTableView中添加记录时,字段一定要完整,不能有空白字段,否则结果无法保存。切记。   如果需要对用户输入做限制,比如只能在指定的字段输入指定的数据类型,可以通过QItemDelegate来实现。 贴一段代码,说明QTableView基本用法

  1. QStandardItemModel model;
  2. //设置大小
  3. model.setColumnCount(3); //列
  4. model.setRowCount(musicFound); //行
  5. //设置标题
  6. model.setHeaderData(0,Qt::Horizontal,"ID");
  7. //添加数据
  8. for(int j=0;j<row;j++)
  9. {
  10. //写id
  11. QStandardItem *itemID = new QStandardItem("hello");//QString::number(j)));
  12. model.setItem(j,0,itemID);
  13. }
  14. //选择这个model
  15. m_ui->tableView->setModel(&model);
  16. //隐藏左边那列
  17. m_ui->tableView->verticalHeader()->hide();
  18. //列宽
  19. m_ui->tableView->setColumnWidth(0,30);
  20. //整行选择
  21. 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);
  
}

运行结果:

本文分享自微信公众号 - CSharp编程大全(y438679770),作者:zls365

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • QT 常用控件操作实例集锦

    zls365
  • C sharp实例:华盾武器门数据接收和解析

    项目介绍: 本实例主要是接收安检金属门的数据解析并显示到界面上,只做功能实现,不做界面美化 硬件:金属门一个、网线一根、电脑主机,金属门网线可以直接接到电脑主机...

    zls365
  • C# 主界面的扁平化

      此处分为两个步骤,第一步是更改winform自带的MainForm窗体属性,第二步是添加窗体事件。

    zls365
  • Yii2用Gii自动生成Module+Model+CRUD

    URL:http://localhost/项目目录/backend/index.php/gii

    botkenni
  • Ext.grid.CheckboxSelectionModel状态设置

    直接上代码: var model = grid.getSelectionModel(); model.selectAll();//选择所有行 model.sel...

    Java中文社群_老王
  • [优化] [CI代码解读] $this->load->model() 问题

    Home 控制器内加载了 menu目录下的 Menu_model和user/User_model 。 menu/Menu_model 又加载了 role/Use...

    CrazyCodes
  • 扶稳!四大步“上手”超参数调优教程,就等你出马了 | 附完整代码

    【导读】在本文中,我们将为大家介绍如何对神经网络的超参数进行优化调整,以便在 Beale 函数上获得更高性能,Beale 函数是评价优化有效性的众多测试函数之一...

    AI科技大本营
  • keras 多gpu并行运行案例

    有多张gpu卡时,推荐使用tensorflow 作为后端。使用多张gpu运行model,可以分为两种情况,一是数据并行,二是设备并行。

    砸漏
  • 干货|详解CNN五大经典模型:Lenet,Alexnet,Googlenet,VGG,DRL

    文章来源:CSDN 作者:大饼博士X 关于卷积神经网络CNN,网络和文献中有非常多的资料,我在工作/研究中也用了好一段时间各种常见的model了,就想着简单整...

    昱良
  • keras系列︱迁移学习:利用InceptionV3进行fine-tuning及预测、完美案例(五)

    之前在博客《keras系列︱图像多分类训练与利用bottleneck features进行微调(三)》一直在倒腾VGG16的fine-tuning,然后因为其...

    素质

扫码关注云+社区

领取腾讯云代金券