【Qt】多元素控件QTableWidget

news2024/12/26 3:51:55

 多元素控件QTableWidget

使用QTableWidget表示一个表格控件,一个表格中包含若干行、每一个行又包含若干列。

表格中的每一个单元格,都是一个QTableWidget对象。

  • QTableWidget核心方法
方法说明

item(int row, int column)

根据⾏数列数获取指定的 QTableWidgetItem*

setItem(int row, int column, QTableWidget*)

根据⾏数列数设置表格中的元素

currentItem()

返回被选中的元素 QTableWidgetItem*

currentRow()

返回被选中元素是第⼏⾏

currentColumn()

返回被选中元素是第⼏列

row(QTableWidgetItem* )

获取指定 item 是第⼏⾏

column(QTableWidgetItem* )

获取指定 item 是第⼏列

rowCount()

获取⾏数

columnCount()

获取列数

insertRow(int row)

在第 row ⾏处插⼊新⾏

insertColumn(int column)

在第 column 列插⼊新列

removeRow(int row)

删除第 row ⾏

removeColumn(int column)

删除第 column 列

setHorizontalHeaderItem(int column, QTableWidget*)

设置指定列的表头

setVerticalHeaderItem(int row, QTableWidget*)

设置指定⾏的表头

  • QTableWidgetItem核心信号
信号说明

cellClicked(int row, int column)

点击单元格时触发

cellDoubleClicked(int row, int column)

双击单元格时触发

cellEntered(int row, int column)

⿏标进⼊单元格时触发

currentCellChanged(int row, int column, int previousRow, int previousColumn)

选中不同单元格时触发

  • QTableWidgetItem核心方法
方法说明

row()

获取当前是第⼏⾏

column()

获取当前是第⼏列

setText(const QString&)

设置⽂本

setTextAlignment(int)

设置⽂本对⻬

setIcon(const QIcon&)

设置图标

setSelected(bool)

设置被选中

setSizeHints(const QSize&)

设置尺⼨

setFont(const QFont&)

设置字体

例子:使用QTableWidget新增行与列

(1)设置一个TableWidget、四个按钮、一个lineEdit

(2)当输⼊框内容为空的时候, 显⽰提⽰信息

也可以在属性栏里面设置

(3)构造表格的三行三列

(4)给三行三列创建行名与列名

(5)设置表格中初始化数据

(6)编写四个按钮的slot函数

代码实现

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 当输⼊框内容为空的时候, 显⽰提⽰信息
    ui->lineEdit->setPlaceholderText("输入新增的行名/列名");

    // 创建 3 行
    ui->tableWidget->insertRow(0);
    ui->tableWidget->insertRow(1);
    ui->tableWidget->insertRow(2);

    // 创建 3 列
    ui->tableWidget->insertColumn(0);
    ui->tableWidget->insertColumn(1);
    ui->tableWidget->insertColumn(2);

    // 创建 3 行的行名
    ui->tableWidget->setVerticalHeaderItem(0, new QTableWidgetItem("学生1"));
    ui->tableWidget->setVerticalHeaderItem(1, new QTableWidgetItem("学生2"));
    ui->tableWidget->setVerticalHeaderItem(2, new QTableWidgetItem("学生3"));

    // 创建 3 列的列名
    ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("姓名"));
    ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("年龄"));
    ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("性别"));

    // 初始化表格
    ui->tableWidget->setItem(0, 0, new QTableWidgetItem("张三"));
    ui->tableWidget->setItem(0, 1, new QTableWidgetItem("19"));
    ui->tableWidget->setItem(0, 2, new QTableWidgetItem("男"));

    ui->tableWidget->setItem(1, 0, new QTableWidgetItem("李四"));
    ui->tableWidget->setItem(1, 1, new QTableWidgetItem("20"));
    ui->tableWidget->setItem(1, 2, new QTableWidgetItem("女"));

    ui->tableWidget->setItem(2, 0, new QTableWidgetItem("王五"));
    ui->tableWidget->setItem(2, 1, new QTableWidgetItem("20"));
    ui->tableWidget->setItem(2, 2, new QTableWidgetItem("男"));

}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_insertRow_clicked()
{
    // 获取行数
    int rowCount = ui->tableWidget->rowCount();
    // 插入新行
    ui->tableWidget->insertRow(rowCount);
    // 获取输入框里的内容
    const QString& text = ui->lineEdit->text();
    // 将内容创建为行名
    ui->tableWidget->setVerticalHeaderItem(rowCount, new QTableWidgetItem(text));
}

void Widget::on_pushButton_removeRow_clicked()
{
    // 获取选中的行数
    int currentROw = ui->tableWidget->currentRow();
    // 删除选中的行
    ui->tableWidget->removeRow(currentROw);
}

void Widget::on_pushButton_insertColumn_clicked()
{
    // 获取列数
    int columnCount = ui->tableWidget->columnCount();
    // 插入新列
    ui->tableWidget->insertColumn(columnCount);
    // 获取输入框里的内容
    const QString& text = ui->lineEdit->text();
    // 将内容创建为列名
    ui->tableWidget->setHorizontalHeaderItem(columnCount, new QTableWidgetItem(text));
}

void Widget::on_pushButton_removeColumn_clicked()
{
    // 获取选中的列数
    int currentColum = ui->tableWidget->currentColumn();
    // 删除选中的列
    ui->tableWidget->removeColumn(currentColum);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2076656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【电路笔记】-运算放大器基础

运算放大器基础 文章目录 运算放大器基础1、概述2、运算放大器表示3、开环增益(Open-Loop Gain)4、输入和输出阻抗5、带宽6、偏移电压7、理想运算放大器模型7.1 饱和模式7.2 线性模式8、实际运算放大器9、总结1、概述 本文将介绍运算放大器(也称为运算放大器,Operational …

HandBrakeCLI 压缩工具的简单实用

HandBrakeCLI -i input.mp4 -o output.mp4 --encoder qsv_h264 -b 500k --preset "Android 576p25" --width 320 --height 576 --quiet--encoder qsv_h264 意思代表inter的gpu编码 -b 500k 设置比特率 --preset "Android 576p25" 设置预设 --width 320 --…

揭秘OTP与MTP:你的存储小秘密,一次性和多次可编程大不同!

NVM,即非易失性存储器,是一种非易失性内存。 NVM的特点是存储的数据在断电后不会消失。传统的NVM,如掩模ROM、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦可编程ROM(EEPROM)、NAND/NOR闪存等,以及目前正在开发的许多新型状态存储器,如磁性存储器(MRAM)、电…

Jar包导入本地maven仓库

当jar包未引入到公共maven仓库时,直接通过maven坐标的方式引入会报错,找不到该依赖。所以可以将jar包导入到本地maven仓库,再通过maven坐标引入后就没有问题。 mvn install:install-file -Dfilexxxxxx.jar -DgroupIdcom.xx -DartifactIdxxxx…

idea debug 各个步骤含义

基本功能 IntelliJ IDEA 的 Debug 功能提供了强大的调试支持,允许开发者逐步执行代码,检查变量值,评估表达式等。以下是 Debug 模式中常见的几个按钮及其含义: Show Execution Point (显示执行点):将光标跳转到当前正在…

如何使用ssm实现模具制造企业订单跟踪管理系统+vue

TOC ssm256模具制造企业订单跟踪管理系统vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,…

编程仙尊——深入理解指针(1)

目录 1.认识指针 2.指针变量和地址 2.1取地址操作符(&) 2.2 指针变量和解引用操作符 2.3 指针变量的大小 3.指针类型的意义 3.1指针的解引用 3.2 指针-整数 3.3 void*指针 1、认识指针 在生活中,一栋楼的每个房间都会有房间号 …

OpenGL实现3D游戏编程【连载5】——纹理坐标、纹理贴图

OpenGL实现3D游戏编程【连载5】——纹理坐标、纹理贴图 欢迎来到zhooyu的专栏。 个人主页:【zhooyu】 文章专栏:【OpenGL实现3D游戏编程】 本专栏内容: 我们从游戏的角度出发,用C去了解一下游戏中的功能都是怎么实现的。这一切还…

六、前后端分离通用权限系统(6)

🌻🌻 目录 一、用户管理1.1、代码生成器1.2、用户管理后端 CRUD1.2.1、controller1.2.2、service 接口1.2.3、service 接口实现1.2.4、mapper1.2.5、xml1.2.6、knife4j 测试 1.3、用户管理前端 CRUD1.3.1、添加路由1.3.2、定义基础 api1.3.3、实现页面功…

架构设计(5)服务网格(Service Mesh)

服务网格(Service Mesh)是一个专门设计的基础设施层,用于管理和处理微服务架构中服务间的通信。服务网格通过在服务间插入代理,提供了一种透明的方式来控制、监控和管理服务之间的流量。以下是关于服务网格的详细介绍,…

( 基于SystemView软件)AM调制与解调仿真实验

一、实验目的: 熟悉使用SystemView软件,了解各部分功能模块的操作和使用方法。 通过实验进一步观察、了解模拟信号AM调制、解调原理。 掌握AM调制信号的主要性能指标。 比较、理解AM调制的相干解调原理。 二、实验器材: 装有SystemView…

【有道云-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

WLAN网络优化,还得看这三剑客!

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 晚上好,我的网工朋友。 WLAN网络成为了企业网络接入的主要手段之一,用户对于WLAN网络的体验性也有了更高的要求。 对于W…

雷达水位监测站低功耗及免维护设计

QY-15雷达水位监测站采用非接触雷达,无磨损无污染产品概述 雷达水位监测站是一款高精度且具有水面波动滤波处理的地表水水位测量产品。它采用喇叭天线的设计,降低功耗,宽范围的输入电压,专门设计于适合野外无人值守的野外自动站应…

图像噪声与被污染图像的恢复

系列文章目录 文章目录 系列文章目录前言一、图像退化模型二、图像噪声2.2 图像噪声的分类2.2.1 加性噪声2.2.2 乘性噪声 三、图像噪声的概率密度函数3.1 高斯噪声3.2 瑞利噪声3.3 均匀分布噪声3.4 脉冲噪声3.5 图像信噪比 四、图像噪声的概率密度函数 前言 数字图像常会因受一…

Elasticsearch之DSL查询语法

​ 前言 在上一篇文章中,我们通过RestClient的Bulk操作导入了大量的hotel数据到elasticsearch,实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。本篇文章会通过使用DSL来介绍elasticsearch的搜索功能。 1. DSL查询分…

C++ 类和对象 3

构造函数扩展 构造函数体内的赋值:构造函数一般是用于类对象的初始化的,但严谨来说并不是成员变量的初始化,内置类型的初始化是在生成的同时赋值而且仅有一次,但是在构造函数体内是能对成员变量进行多次赋值的。所以在函数体内的…

GeoStudio2024:地质工程的瑰宝下载安装介绍

引言 青山隐隐,流水潺潺,吾心所向,乃地质之奥秘。GeoStudio2024,如同一卷古籍,蕴藏无尽智慧,助吾等探寻地质之真谛。今以李白之笔,述其妙用,愿与君共赏。 初识GeoStudio2024 初见…

优化系统性能:深入探讨Web层缓存与Redis应用的挑战与对策

Web层缓存对于提高应用性能至关重要,它通过减少重复的数据处理和数据库查询来加快响应时间。例如,如果一个用户请求的数据已经缓存,服务器可以直接从缓存中返回结果,避免了每次请求都进行复杂的计算或数据库查询。这不仅提高了应用…

【iOS】iOS中简单的网络请求

目录 前言认识API和RULAPIURL两者的联系 简单的网络请求1. 创建URL对象2. 创建URLRequest对象3. 设置请求头(如果需要)4. 发送请求异步请求同步请求 5. 处理请求结果6.启动数据任务完整代码示例及运行结果: 关于同步请求和异步请求同步请求异…