Qt4实现TableView显示表格数据

article/2025/8/26 14:43:06

最近又开始搞QT开发了,前面学的MVC啥的都忘得差不多了,重新整理一遍思路吧。

目前的需求是:读取文本文件,表格型数据,用tableview显示出来,最后画图。这涉及到三个问题,文件读写,数据显示,数据绘图。

按照QT教材和网上分析,需要用标准项模型,标准项等实现,如果有很多项,那么循环又涉及到不断new新的标准项,感觉不妥当,又想着用二维数组吧,用法有些过时,而且插入、删除又不好整。QVector之类的也不好使。最后才发现,根本用不着setitem,只要setdata就可以了,这是最简单的方案。只需三步即可。

先来看下怎么显示数据,tableview的思路是“模型-视图”,所以要显示数据,首先得定义模型。

1 创建标准项模型Standard Item Model

// 这段可以写在头文件声明为成员变量
#include <QStandardItemModel>
QStandardItemModel *model;// 这段可以写在构造函数或回调函数里执行
model = new QStandardItemModel(this);

这就定义好了一个空模型,当然,new的时候也可以指定行列

model = new QStandardItemModel(row,col,this);

如果没指定行列,连接视图后就显示不出来。这里不指定的话,后面可以接着单独指定

    model->insertRows(0,10,QModelIndex());model->insertColumns(0,5,QModelIndex());

参1是第几行(列),参2是插入几行(列)

2 用SetData插入数据

不用item,直接对模型插入数据

    for(int i = 0; i<10; i++){for(int j = 0; j<5; j++){model->setData(model->index(i,j,QModelIndex()),QString::number(i+j));}}

就完成了。

下面记录一下弯路:

这里容易混淆的是,qt里有抽象项模型abstracti tem model,还有标准项模型 standard item model,我们这里用标准项模型就可以。

include了标准项模型后,就可以使用standarditemmodel 和 standarditem两种类型,分别代表模型和项。

值得注意的是,创建模型对象最好new一个指针,不然放到构造函数或者槽函数中,容易因为生命周期短,被销毁而无法在视图中显示。

3 创建标准项 Standard Item

标准项也是最好搞成指针,先创建根节点,在定义普通节点,最后将普通节点附加在根节点,模型就算是设置好了。

#include <QStandardItemModel>// 创建标准项模型QStandardItemModel *model = new QStandardItemModel(this);// 创建根项QStandardItem *parentItem = model->invisibleRootItem();// 创建普通项QStandardItem *item0 = new QStandardItem;// 设置文本item0->setText("A");// 将普通项附加到根上parentItem->appendRow(item0);

上面的代码就是创建模型的基本流程。

4 用视图来显示模型

qt常用的视图有list tree table,我们这里只看table。

直接在gui里放入tableview控件,那么将视图和模型连接起来只需要一行代码:

ui->tableView->setModel(model);

之后编译程序,就可以正常显示了:

 5 槽函数中对模型进行修改

如果要在槽函数中修改模型,那么最好把模型,项之类的对象定义为main window的成员变量,这样就解决了变量传递的问题。

void MainWindow::on_action_triggered()
{QStandardItem *item = new QStandardItem;item->setText("B");parentItem->appendRow(item);
}

新建一个按钮,然后编写槽函数。在此之前,把定义在构造函数里的模型model,根节点parentItem都写在main window成员函数里,这样在槽函数就可以直接调用了。

槽函数里的思路很简单,既然模型已经定义了,就直接再追加一个item就行,之后测试,点击按钮,视图就可以更新了。

每点击一个按钮,都会在下一行追加一个item,其文本为B。

这里稍微在讲一下模型,项的原理。

其实模型就好比一个阵列式指针,里面记录了数据的位置,数据其实还是在变量里保存的,new完一个变量后,指针就指向了内存,settext其实就是往这里记录数据。然后追加到根节点后,model就好像指针一样指向了这个数据。也就是说,并不是复制数据到模型里,而是模型记录了数据的位置。

那么总结下就是,模型就是个阵列指针。数据还是保存在变量了,变量的位置由item指定。

如果删除了item,那么模型设置好的位置就没数据了,反映到视图中,就是数据没了。

这里我们在槽函数中加一句:delete item,把item指针删除,那么根节点就会追加一行,但是没有数据。

如果想删除节点,那么使用romove就可以,比如再写一个槽函数,功能是实现删除一行:

parentItem->removeRow(parentItem->rowCount()-1);

就可以删除最后一行了。这里-1是因为行从0开始。

6 循环批量插入数据

这里我们不适用根节点——节点这种定义方式,而是采用更适用于表的setItem方法来实现模型的编辑。

在引入一个按钮,定义槽函数:

void MainWindow::on_action_3_triggered()
{QStandardItem *item;for(int i = 1; i<5; i++){for(int j = 1; j<7; j++){item = new QStandardItem(QString::number(i+j));model->setItem(i-1,j-1,item);}}
}

这里首先定义一个标准项,然后循环用new创建item,然后用setitem来指定模型对应行列上的项。

这样更适用于表格数据

留一个疑问:删除节点后,item指针时循环生成时,变量怎么删除?

 

2 模型索引


http://chatgpt.dhexx.cn/article/ya0cHQBt.shtml

相关文章

NAT模式下的虚拟机网络配置

原理 NAT模式&#xff0c;也叫地址转换模式&#xff0c; 当把我们的虚拟机的上网方式设置为NAT模式时&#xff0c;虚拟机、宿主机、各网卡之间的连接关系可用下图来表示&#xff1a; 具体配置流程 1 将本地以太网共享到v8适配器上 2 查看虚拟网络编辑中的NAT模式下的子网IP…

虚拟机vmware设置nat模式上网

桥接模式上网&#xff1a;虚拟机vmware设置桥接模式上网_cao849861802的博客-CSDN博客 首先虚拟机有两个虚拟网卡vmnet0和vmnet8 这个vmnet0默认的是桥接模式&#xff0c;这个vmnet8默认是nat模式&#xff1b; 我们这里只看nat模式&#xff0c;所以先不关心vmnet0虚拟网卡&a…

VMware16NAT模式配置固定IP

文章目录 前言一、NAT配置固定IP二、重启网卡结尾 前言 为什么要配置固定IP呀&#xff1f;这个很容易解释啊&#xff0c;因为配置集群要设置固定IP&#xff08;主结点需要管理子结点&#xff0c;通过固定IP识别机器&#xff09;&#xff0c;因为你访问虚拟机方便&#xff08;不…

VMware Workstation中桥接模式、NAT模式、仅主机模式

一、VMware虚拟机的网络模式 VMware工作站虚拟机有三种网络模式【①桥接模式 ②NAT模式 ③仅主机模式】,如下图所示: 二、VMware虚拟机的网络模式介绍 2.0、VMware的虚拟设备 VMware的虚拟设备 序号虚拟设备编号说明1VMnet0是虚拟桥接网络下的虚拟交换机2VMnet1是虚拟Host-…

vm虚拟机nat模式配置

痛点&#xff1a; 为了解决虚拟机与板子网络的调试的问题&#xff0c;我之前一直用桥接&#xff0c;如果虚拟机想上网就桥接到无线网卡&#xff0c;如果想连接板子&#xff0c;就桥接到有线网卡&#xff0c;麻烦&#xff0c;需要来回切换&#xff0c;还有就是不插板子的情况下和…

nat模式

原文链接&#xff1a;https://www.linuxidc.com/Linux/2016-09/135521p2.htm &#xff08;复制过来只是为了学习方便&#xff0c;如有不妥会立即删除&#xff09; 二、NAT&#xff08;地址转换模式&#xff09; 刚刚我们说到&#xff0c;如果你的网络ip资源紧缺&#xff0c;但…

虚拟机NAT模式无法联网

工作中遇到NAT模式虚拟机&#xff0c;修改了编辑-虚拟网络编辑器 中NAT设置IP&#xff0c;DNS&#xff0c;DHCP等配置&#xff0c;在centos8中修改了ens33文件都无法联网的情况&#xff0c;特此总结解决方案 按照该方法尝试后无效&#xff08;解决方法在下面&#xff09; 第一…

桥接模式NAT模式 详解

NAT模式 和 桥接模式 网络地址转换 NAT &#xff1a; 首先看一下NAT的概念&#xff1a;装有NAT软件的路由器叫做NAT路由器&#xff0c;它至少有一个有效的外部全球IP地址&#xff0c;这样所有使用本地地址&#xff08;内部专用地址&#xff09;的主机在和外界通信时&#xff…

虚拟机NAT模式无法上网

虚拟机NAT模式无法上网 一、确认虚拟机的ip地址二、确认服务是否开启 一、确认虚拟机的ip地址 确认虚拟机的ip地址与本机的vmnet8的ip地址是否在同一个网段&#xff0c;且网关是否一致&#xff1a; cd /etc/sysconfig/network-scripts/ ls vi ifcfg-ens33如果ip配置都没有问…

【VMware】NAT模式、桥接模式、仅主机模式

VMware的NAT模式、桥接模式、仅主机模式 转载自&#xff1a;https://wxler.github.io/2021/02/02/221724/ 1. NAT模式 拓扑图&#xff1a; 在NAT网络中&#xff0c;会用到VMware Network AdepterVMnet8虚拟网卡。 VMware Network AdepterVMnet8是主机上的一块虚拟网卡&…

虚拟机NAT模式集群改为桥接模式集群

有时候&#xff0c;A 电脑要访问 B 电脑上安装的虚拟机&#xff0c;尴尬的是之前虚拟机配置的网络连接模式为 NAT 模式。 那怎么才能让 A 电脑正常地访问 B 电脑上的虚拟机呢&#xff1f;就需要将虚拟机的网络连接模式由 NAT 模式修改为 桥接模式 。 需要下面简单的几步就可以…

LVS NAT模式配置实践

1. LVS单网卡配置 注&#xff1a;实际应用中LVS使用双网卡&#xff0c;这里仅做演示用。架构图如下&#xff1a; 单网卡LVS 1.1 机器信息 LVS LVS&#xff1a;eth0 10.10.1.100&#xff08;VIP&#xff09; Real Server RS1&#xff1a;eth0 10.10.1.1RS2&#xff1a;eth…

虚拟机网络模式-NAT模式配置

1、打开VMware&#xff0c;点击编辑——》虚拟网络编辑器 2、配置NAT子网。 注意&#xff1a;不能配置和物理主机为同一网段的IP段 点击NAT设置。设置虚拟子网的网关 注意&#xff1a;正常是使用.1做为网关&#xff0c;如果出现网络不行&#xff0c;可以改成.2做网关 4、点击…

Linux下配置nat模式

&#xff08;一&#xff09;打开网络虚拟编辑器 点击更改设置&#xff0c;我们安装好VMware后&#xff0c;在网络连接处会出现两张虚拟网卡&#xff0c;分别是vmnet1和vmnet8&#xff0c;net模式需要配置vmnet8网卡。 接下来通过命令进入 cd /etc/sysconfig/network-scripts&am…

Vmware配置NAT模式

NAT模式注意事项 1.虚拟网卡要和虚拟机在一个网段内。 2.虚拟网卡的网关要和虚拟机网关相同。 3.虚拟机网卡的子网和物理主机不需要在同一个网段&#xff0c;物理主机网段一般为192.168.1.xx,建议虚拟机使用别的网段。 NAT模式使用的是VMnet8虚拟网卡配置 虚拟网络编辑器配置…

【虚拟机NAT模式及桥接模式配置】

VMware虚拟机网络配置 虚拟机常见的网络类型NAT&#xff08;网络地址转换&#xff09;Bridged&#xff08;桥接模式&#xff09;Host-Only&#xff08;仅主机&#xff09; 虚拟机网络配置配置为NAT模式配置为桥接模式 虚拟机常见的网络类型 Vmware 为我们提供了三种网络工作模…

centos 设置nat模式

1&#xff1a;将虚拟机的网络适配器设置为nat模式 2&#xff1a;在vm的编辑菜单中选中虚拟网络编辑器&#xff0c;选择更改设置&#xff0c;进去后选中VMnet8&#xff0c; 3&#xff1a;在虚拟机中进入/etc/sysconfig/network-scripts目录&#xff0c;修改ifcfg-eth33文件 4:宿…

NAT模式 桥接模式bridge原理理解

桥接场景 无论现在的各种容器&#xff0c;还是我们之前常用的虚拟机&#xff0c;为了与局域网内其他IP通讯通常需要用到『桥接』。 Bridge桥接方式 Bridge 将虚拟机桥接到host机器的网卡上,guest和host机器都通过bridge上网.对外不同的ip。 NAT 想要理解Bridge首先要理解NA…

VMware虚拟机 之 NAT模式详解

如果你的网络ip资源紧缺&#xff0c;但是你又希望你的虚拟机能够联网&#xff0c;这时候NAT模式是最好的选择。NAT模式借助虚拟NAT设备和虚拟DHCP服务器&#xff0c;使得虚拟机可以联网。其网络结构如下图所示&#xff1a; 在NAT模式中&#xff0c;主机网卡直接与虚拟NAT设备相…

桥接模式、NAT模式和仅主机模式

目录 一、虚拟机的网络 二、桥接模式、NAT模式、仅主机模式 1、bridged&#xff08;桥接模式&#xff09; 2、NAT&#xff08;网络地址转换模式&#xff09; 3、host-only&#xff08;仅主机模式&#xff09; 三、使用 DHCP 自动分配地址 在 VMware 中&#xff0c;虚拟机…