Qt GUI图形图像开发之Qt表格控件QTableView简单使用方法及QTableView与QTableWidget区别

QTableView是Qt中用来把数据集以表格形式提供给用户的一个控件

QTableView类实现表格视图,QTableView的数据由继承QAbstractItemModel的子类models来提供

#include<QStandardItemModel>
  QStandardItemModel *model = new QStandardItemModel();
  ui->tableView->setModel(model);

一、添加表头:

  model->setColumnCount(2);
  model->setHeaderData(0,Qt::Horizontal,"卡号");
  model->setHeaderData(1,Qt::Horizontal,"姓名");

二、设置表格属性:

ui->tableView->setModel(model);
//表头信息显示居左
ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);

水平对齐方式有:

Constant Value Description
Qt.AlignLeft 0x0001 Aligns with the left edge.
Qt.AlignRight 0x0002 Aligns with the right edge.
Qt.AlignHCenter 0x0004 Centers horizontally in the available space.
Qt.AlignJustify 0x0008 Justifies the text in the available space.

垂直对齐方式:

Constant Value Description
Qt.AlignTop 0x0020 Aligns with the top.
Qt.AlignBottom 0x0040 Aligns with the bottom.
Qt.AlignVCenter 0x0080 Centers vertically in the available space.

如果两种都要设置,只要用 Qt.AlignHCenter |  Qt.AlignVCenter 的方式即可

//设置列宽不可变
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("哈哈")));
 }

四、为单元格添加图标

  tableWidget->setItem(0,0,new QTableWidgetItem("Jan"));
  tableWidget->setItem(1,0,new QTableWidgetItem("Feb"));
  tableWidget->setItem(2,0,new QTableWidgetItem("Mar")); 

  tableWidget->setItem(0,1,new QTableWidgetItem(QIcon("images/IED.png"), "Jan's month"));
  tableWidget->setItem(1,1,new QTableWidgetItem(QIcon("images/IED.png"), "Feb's month"));
  tableWidget->setItem(2,1,new QTableWidgetItem(QIcon("images/IED.png"), "Mar's month"));

五、删除行:

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

六、取表格(3,3)文本

model->item(3,3)->text()

七、设置表格(3,3)文本

model->item(3,3)->setText("123");

八、禁止编辑

ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);  //禁止编辑

九、选择整行

ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);  //选择整行

Constant


Value


Description


QAbstractItemView.SelectItems


0


Selecting single items.选中单个单元格


QAbstractItemView.SelectRows


1


Selecting only rows.选中一行


QAbstractItemView.SelectColumns


2


Selecting only columns.选中一列

十、选择方式:

tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); //设置为可以选中多个目标

该函数的参数还可以是:

QAbstractItemView.NoSelection      不能选择

QAbstractItemView.SingleSelection  选中单个目标

QAbstractItemView.MultiSelection    选中多个目标

QAbstractItemView.ExtendedSelection   QAbstractItemView.ContiguousSelection 的区别不明显,主要功能是正常情况下是单选,但按下Ctrl或Shift键后,可以多选

十一、表格表头的显示与隐藏

对于水平或垂直方法的表头,可以用以下方式进行 隐藏/显示 的设置:

tableWidget->verticalHeader()->setVisible(false);  //隐藏列表头
tableWidget->horizontalHeader()->setVisible(false); //隐藏行表头 

十二、对表头文字的字体、颜色进行设置

QTableWidgetItem *columnHeaderItem0 = tableWidget->horizontalHeaderItem(0); //获得水平方向表头的Item对象  
columnHeaderItem0->setFont(QFont("Helvetica")); //设置字体  
columnHeaderItem0->setBackgroundColor(QColor(0,60,10)); //设置单元格背景颜色  
columnHeaderItem0->setTextColor(QColor(200,111,30)); //设置文字颜色

十三、在单元格里加入控件:

QTableWidget不仅允许把文字加到单元格,还允许把控件也放到单元格中。比如,把一个下拉框加入单元格,可以这么做:

QComboBox *comBox = new QComboBox();
comBox->addItem("Y");
comBox->addItem("N");
tableWidget->setCellWidget(0,2,comBox); 

十四、合并单元格

tableWidget->setSpan(0, 0, 3, 1) //其参数为: 要改变单元格的  1行数 2列数   要合并的 3行数 4列数

十五、获取被单击表格内容

通过实现 itemClicked (QTableWidgetItem *) 信号的槽函数,就可以获得鼠标单击到的单元格指针,进而获得其中的文字信息

connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(getItem(QTreeWidgetItem*,int)));
//将itemClicked信号与函数getItem绑定

QTableWidget和QTableView的区别:

QTableWidget是QTableView的子类。

主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。

这主要体现在QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。

使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。

本文简单介绍了Qt表格控件QTableView简单使用方法及QTableView与QTableWidget区别,更多关于Qt表格控件QTableView使用技巧请查看下面的相关链接

(0)

相关推荐

  • Qt串口通信开发之QSerialPort模块Qt串口通信接收数据不完整的解决方法

    在使用串口接收数据时,当数据量大的时候会出现数据接收不完整的情况. 因为串口数据获取函数readAll()由readyRead()信号触发,但readyRead()信号在串口读到起始标志时立即发送,并不保证一定是当前所发数据的起始部分. 因此串口通信双方在通信前应制定好通信协议,规定好数据的起始和结束标志,串口当读到完整的起始和结束标志之后,才认定读完一条完整的数据. 本例中用串口定时发送当前时间,用"#"表示数据的结尾,定时时间为0毫秒,即能发多快就发多快. 发送 void Widg

  • Qt图形图像开发之曲线图表库QtChart编译安装详细方法与使用实例

    Qt曲线图表库QtChart简介 Qt的线性绘图控件有大名鼎鼎的Qwt,ChartDirector,小巧玲珑的QCustomPlot,当然还有自家的QtChart.长久以来QtChart在Qt家族里一直是收费的模块,只有商业版才可以使用,但Qt5.7之后将开放其权限,可参见:Qt 5.7 亮瞎眼的更新.下面将介绍如何安装QtChart并进行简单的绘图. Qt曲线图表库QtChart下载 这里用git下载QtChart,参考Qt Charts 5.7.0 安装教程 Git地址:https://gi

  • Qt串口通信开发之QSerialPort模块详细使用方法与实例

    Qt串口通信基础及名词说明 串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据.它很简单并且能够实现远距离通信.比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米: 而对于串口而言,长度可达1200米.典型地,串口用于ASCII码字符的传输.通信使用3根线完成,分别是地线.发送.接收.由于串口通信

  • Qt图形图像开发之QT滚动区控件(滚动条)QScrollArea的详细方法用法图解与实例

    QT滚动区控件(滚动条控件)QScrollArea简介 滚动区域控件QScrollArea用于显示一个画面中的子部件的内容.如果部件超过画面的大小,视图可以提供滚动条,这样就可以看到部件的整个区域. QScrollArea属于控件容器类,可以直接在ui中拖出来. 对于QScrollArea,最难搞懂的就是:如何控制它,才能让它在我们想要出现滚动条的时候出现滚动条. 我们拖入一个QScrollArea,再向他里面拖入4个button,观察信息如下: 可以发现,4个button并不是直接位于QScr

  • Qt图形图像开发之曲线图表模块QChart库坐标轴和数据不对应、密集的散点图无法显示问题解决方法

    QChart坐标轴和数据不对应问题描述: lineseries->append(4, 10); lineseries->append(5, 8); Chart->addSeries(lineseries); // 将 series 添加至图表中 axisX->setRange(0, 15);//设置X的显示范围 axisY->setRange(-20, 20); lineChart->setAxisX(axisX);//把轴添加到图表中 lineChart->se

  • Qt串口通信开发之QSerialPort模块简单使用方法与实例

    我这里主要是对串口类的简单使用,实现的功能是以读写方式打开串口,点击发送数据按钮将发送区的数据发送到缓冲区,然后在接收区显示出来,界面如下:(源码可以在这里下载) 这里使用了QSerialPort模块提供的两个类:QSerialPort类和QSerialPortInfo类,QSerialPort类提供了对串口的操作,QSerialPortInfo类提供了对串口信息的获取.下面是主要代码,包含了对串口类的简单使用. 首先,一定要在.pro文件中添加:QT += serialport 串口初始化如下

  • Qt图形图像开发曲线图表模块QChart库缩放/平移详细方法与实例

    1.使用QChartView来缩放 (1)用鼠标框选一个矩形,把图放大到这个矩形 QChartView::setRubberBand(QChartView::RectangleRubberBand);//XY方向同时放大到鼠标画出的矩形大小(也可以设置为只放大X轴或Y轴) (2)setRubberBand函数同时也能使鼠标右键,具备缩小图的功能. 2.使用Qchart来平移和缩放 QChart::scroll(-10, 5);//整体平移(-10, 5),两个参数分别为Δx和Δy QChart:

  • Qt图形图像开发之曲线图表模块QChart库读取/设置X轴的显示区间

    设置初始的显示的区间,常用的有两种方法 (1)自动 lineseries = new QLineSeries();//声明折线数据集 lineseries->append(4, 10); //填充数据集 *lineseries << QPointF(13, 5) << QPointF(17, 6); lineChart = new QChart();//创建图表 lineChart->addSeries(lineseries); // 将 数据集 添加至图表中 line

  • Qt图形图像开发之Qt曲线图美化QChart QScatterSeries 空心点阵图,鼠标移动到上面显示数值,鼠标移开数值消失效果实例

    最近接到一个Qt QChart曲线图美化的需求,画一个折线图,关键点使用空心的圆点标识出来,鼠标移动到关键点上,显示出当前数值:鼠标移走数值消失. 效果图如下: 我们遇到这个需求的时候,第一时间就会想到使用 QLineSeries 画折线图. 首先初始化 QChart *chart = new QChart(); chart->legend()->setVisible(false); ui->chartView->setChart(chart); ui->chartView-

  • Qt图形图像开发之曲线图表模块QChart库一个chart中显示两条曲线详细方法与实例

    首先要了解QChartView.QChart.QLineSeries.QValueAxis的实体之间的关系,例如一个QChartView中可以包含几个QValueAxis?这些可参考 Qt图形图像开发曲线图表模块QChart库基本用法.各个类之间的关系说明 每个chart可以包含多个QLineSeries数据系列,每个QLineSeries数据系列又包含了2个QValueAxis数值轴或QDateTimeAxis时间轴. 那么这个chart中的多个数据系列,一起显示在同一个chart中,会是什么

  • Qt图形图像开发曲线图表模块QChart库基本用法、各个类之间的关系说明

    如何编译安装QChart请查看下面文章 Qt图形图像开发之曲线图表库QtChart编译安装详细方法与使用实例 使用Qt曲线图表模块Chart库首先要注意3点: (1)在.pro文件中添加:QT += charts. (2)用到QChart的文件中添加:QT_CHARTS_USE_NAMESPACE,或者:using namespace QtCharts; 在ui界面中拖入一个graphicsView控件,然后右击提升为QChartView类,写提升为的类:QtCharts::QChartView

  • Qt串口通信开发之Qt串口通信模块QSerialPort开发完整实例(串口助手开发)

    之前自己写了用于上位机做基本收发的界面,独立出来相当于一个串口助手,先贴图: 功能作为串口助手来说还算完善,五个发送槽,一个接收槽,可以检测可用串口并加上相关标志,串口设置,记数功能,还有菜单栏上的文件操作和一些选择功能. 下面说一说这个项目: 做这个串口助手分为两步,第一步是设计界面,第二部是功能的代码实现. 一.界面设计 界面设计用Qt Designer,当然用Qt Creator的界面编辑器也可以,只不过感觉Qt Designer更好用一点,因为可以随时运行查看你的界面效果而不用编译整个项

  • Qt图形图像开发之曲线图模块QCustomplot库生成静态、动态曲线详细教程图解

    Qt曲线图模块QCustomPlot库介绍 QCustomPlot是一个小型的Qt画图标类,支持绘制静态曲线.动态曲线.多重坐标曲线,柱状图,蜡烛图等.只需要在项目中加入头文件qcustomplot.h和qcustomplot.cpp文件,然后使一个widget提升为QCustomPlot类,即可使用. QCustomPlot官网:   http://www.qcustomplot.com/ QCustomPlot下载地址:   http://www.qcustomplot.com/index.

  • Qt图形图像开发之高性能曲线图模块QCustomplot库详细使用方法与实例(支持动、静曲线图)

    Qt曲线图模块QCustomPlot库介绍 QCustomPlot是一个小型的Qt画图标类,支持绘制静态曲线.动态曲线.多重坐标曲线,柱状图,蜡烛图等 前段时间用QChart模块画图,一条曲线上面放8000条数据就会卡的不行必须要换个其他的控件,后来找到了曲线图模块QCustomplot库 这个库性能非常好,画曲线图折线图柱状图动态静态,放大缩小,都很好用,10w条数据量无压力秒画出来一点也不卡 下载地址 https://www.qcustomplot.com/index.php/downloa

  • Qt GUI图形图像开发之QT表格控件QTableView,QTableWidget复杂表头(多行表头) 及冻结、固定特定的行的详细方法与实例

    我们在开发过程中对于表格使用频率还是挺高的,使用QT框架开发时候我们使用QTableView或者QTableWidget创建表格. 其中表格分为 表格头与表格体: 对于简单地表格,我们可以设置表头来满足我们的要求(当然也可以隐藏表头),不过对于定制化的表头,我们能做的不是特别多.特别是对于复杂的表头,使用自带的表头,无论怎么设置都不太可能达到需求.例如我最近接到的一个项目,需求是: 我们分析一下这个表格有什么特点: 1.表头不是简单的一行,而是两行. 2.表头有单元格的合并. 3.部分表头中间有

随机推荐