【嵌入式——QT】QTableWidget

news2024/11/25 20:23:53

表格小部件为应用程序提供标准的表格显示功能。QTableWidget中的项由QTableWidgetItem提供。
如果你想要一个使用你自己的数据模型的表,你应该使用QTableView而不是这个类。

常用函数

  • cellWidget(int row, int column) const:返回显示在给定行和列的单元格中的小部件;
  • closePersistentEditor(QTableWidgetItem *item):关闭item的持久编辑器;
  • column(const QTableWidgetItem *item) const:返回该项的列;
  • columnCount() const:返回列数;
  • currentColumn() const:返回当前项的列;
  • currentItem() const:返回当前项;
  • currentRow() const:返回当前行;
  • editItem(QTableWidgetItem *item):如果项目是可编辑的,则开始编辑它;
  • item(int row, int column) const:如果给定的行和列已经设置,则返回对应的项;否则返回nullptr;
  • itemAt(const QPoint &point) const:返回指向给定点上的项的指针,如果point没有被表部件中的项覆盖,则返回nullptr;
  • removeCellWidget(int row, int column):删除行和列指示的单元格上设置的小部件;
  • row(const QTableWidgetItem *item) const:返回该项的行;
  • rowCount() const:返回行数;
  • setColumnCount(int columns):设置列数;
  • setCurrentCell(int row, int column):将当前单元格设置为位置(行、列)处的单元格;
  • setCurrentItem(QTableWidgetItem *item):将当前项设置为项;
  • setHorizontalHeaderItem(int column, QTableWidgetItem *item):将“列”的水平标题项设置为“项”。如果有必要,列数会增加以适应项目。删除前一个首部项(如果有的话);
  • setHorizontalHeaderLabels(const QStringList &labels):使用labels设置水平标题标签;
  • setItem(int row, int column, QTableWidgetItem *item):将给定行和列的项设置为项;
  • setRowCount(int rows):将这个表的模型中的行数设置为rows;
  • setVerticalHeaderItem(int row, QTableWidgetItem *item):将行的垂直标题项设置为项;
  • setVerticalHeaderLabels(const QStringList &labels):使用labels设置垂直标题标签;
  • takeItem(int row, int column):从表中删除行和列的项,但不删除它;

信号

  • cellActivated(int row, int column):当按行和列指定的单元被激活时,发出此信号;
  • cellChanged(int row, int column):当由行和列指定的单元格中的项的数据发生更改时,就会发出此信号;
  • cellClicked(int row, int column):每当单击表格中的一个单元格时,就会发出这个信号。指定的行和列是单击的单元格;
  • cellDoubleClicked(int row, int column):每当双击表格中的一个单元格时,就会发出这个信号。指定的行和列是单击的单元格;
  • cellEntered(int row, int column):当鼠标光标进入一个单元格时,就会发出这个信号。单元格由行和列指定;
  • cellPressed(int row, int column):每当按下表格中的一个单元格时,就会发出这个信号。指定的行和列是按下的单元格;
  • void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn):每当当前单元格发生变化时,该信号就会发出。previousRow和previousColumn指定的单元格是之前获得焦点的单元格,currentRow和currentColumn指定的单元格是新的当前单元格;
  • currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous):每当当前元素发生变化时,就会发出这个信号。previous item是之前拥有焦点的项,current是新的当前项;
  • itemActivated(QTableWidgetItem *item):当指定的元素被激活时,就会发出这个信号;
  • itemChanged(QTableWidgetItem *item):每当item的数据发生变化时,就会发出这个信号;
  • itemClicked(QTableWidgetItem *item):每当单击表中的某个元素时,就会发出这个信号。指定的项目是被单击的项目;
  • itemDoubleClicked(QTableWidgetItem *item):每当双击表中的一个元素时,就会发出这个信号。指定的项是被双击的项;
  • itemEntered(QTableWidgetItem *item):当鼠标光标进入某个元素时,就会发出这个信号。项目就是输入的项目;
  • itemPressed(QTableWidgetItem *item):每当按下表中的一个元素时,就会发出这个信号。指定的项目是按下的项目;
  • itemSelectionChanged():每当选择发生变化时,就会发出这个信号;

槽函数

  • clear():删除视图中的所有项。这也将删除所有的选择和标题;
  • clearContents():从视图中删除所有不在标题中的项。这也将删除所有的选择。表的维度保持不变;
  • insertColumn(int column):在列处向表中插入一个空列;
  • insertRow(int row):在表的row处插入一个空行;
  • removeColumn(int column):从表中删除列及其所有项;
  • removeRow(int row):从表中删除行及其所有项;
  • scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible:如果需要,滚动视图以确保项目可见;

QTableWidgetItem
表项用于保存表小部件的信息片段。项目通常包含文本、图标或复选框
QTableWidgetItem类是一个方便类,它取代了Qt 3中的QTableItem类。它提供了一个与QTableWidget类一起使用的项。

QTableWidgetItem常用函数

  • background() const:返回用于渲染项目背景的画笔;
  • checkState() const:返回表项的已检状态;
  • column() const:返回表中项的列。如果某项不在表中,这个函数将返回-1;
  • data(int role) const:返回指定角色的项数据;
  • flags() const:返回用于描述项的标志。它们决定是否可以检查、编辑和选择项目;
  • font() const:返回用于渲染项目文本的字体;
  • isSelected() const:如果选中项,则返回true,否则返回false;
  • read(QDataStream &in):从流中读取项目;
  • write(QDataStream &out) const:将项写入流输出;
  • row() const:返回表中项目的行。如果某项不在表中,这个函数将返回-1;
  • setCheckState(Qt::CheckState state):将表项的检查状态设置为state;
  • setData(int role, const QVariant &value):为给定角色设置项的数据为指定的值;
  • setFlags(Qt::ItemFlags flags):将项的标志设置为给定的标志。它们决定了是否可以选择或修改项;
  • setText(const QString &text):将项的文本设置为指定的文本;
  • setTextAlignment(int alignment):将项目文本的文本对齐方式设置为指定的对齐方式;

图示
在这里插入图片描述

代码示例
QTableWidgetDialog.h

#ifndef QTABLEWIDGETDIALOG_H
#define QTABLEWIDGETDIALOG_H

#include <QDialog>
#include <QLabel>
namespace Ui
{
    class QTableWidgetDialog;
}

enum CellType {ctName = 1000, ctSex, ctBirth, ctNation, ctPartyM, ctScore};
enum FieldColNum {colName=0, colSex, colBirth, colNation, colScore, colPartyM};

class QTableWidgetDialog : public QDialog
{
    Q_OBJECT

public:
    explicit QTableWidgetDialog(QWidget* parent = nullptr);
    ~QTableWidgetDialog();
    void init();

    void createItemARow(int rowNo, QString name, QString sex, QDate birth, QString nation, bool isPm, int score);
private slots:
    void on_pbSetHeader_clicked();

    void on_pbInit_clicked();

    void on_pbSetCountRow_clicked();

    void on_pbGetData_clicked();

    void on_tableWidget_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn);

    void on_pbInsertRow_clicked();

    void on_pbAddRow_clicked();

    void on_pbRemoveCurRow_clicked();

    void on_pbAutoRowh_clicked();

    void on_pbAutoColw_clicked();

    void on_checkBoxEdit_clicked(bool checked);

    void on_checkBoxRowHeader_clicked(bool checked);

    void on_checkBoxColHeader_clicked(bool checked);

    void on_checkBoxColor_clicked(bool checked);

    void on_radioButtonRow_clicked();

    void on_radioButtonItem_clicked();

private:
    Ui::QTableWidgetDialog* ui;

    QLabel* labCellIndex;
    QLabel* labCellType;
    QLabel* labStudID;

};

#endif // QTABLEWIDGETDIALOG_H

QTableWidgetDialog.cpp

#include "QTableWidgetDialog.h"
#include "ui_QTableWidgetDialog.h"
#include <QDate>
#include <QIcon>
#include <QDebug>
QTableWidgetDialog::QTableWidgetDialog(QWidget* parent)
    : QDialog(parent)
    , ui(new Ui::QTableWidgetDialog)
{
    ui->setupUi(this);
    init();
}

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

void QTableWidgetDialog::init()
{
    ui->spinBoxCount->setMaximum(10000);
}

void QTableWidgetDialog::on_pbSetHeader_clicked()
{
    QTableWidgetItem* headerItem;
    QStringList headerText;
    headerText<<"姓名"<<"性别"<<"出生日期"<<"民族"<<"分数"<<"是否党员";
    ui->tableWidget->setColumnCount(headerText.count());
    ui->tableWidget->horizontalHeader()->setMinimumHeight(50);
    for(int i=0; i<ui->tableWidget->columnCount(); i++) {
        headerItem = new QTableWidgetItem(headerText.at(i));
        QFont font = headerItem->font();
        font.setBold(true);
        font.setPointSize(12);
        headerItem->setTextColor(Qt::red);
        //设置单元格显示字体
        headerItem->setFont(font);
        ui->tableWidget->setHorizontalHeaderItem(i, headerItem);
    }
}


void QTableWidgetDialog::on_pbInit_clicked()
{
    QString strName, strSex;
    bool isParty = false;
    QDate birth;
    birth.setDate(1995, 1, 1);
    //清除表格数据区数据 但是不清除表头
    ui->tableWidget->clearContents();
    //返回数据区行数
    int rows = ui->tableWidget->rowCount();
    for(int i=0; i<rows; i++) {
        strName = QString::asprintf("学生%d", i);
        if((i % 2)==0) {
            strSex = "man";
        } else {
            strSex = "woman";
        }
        createItemARow(i, strName, strSex, birth, "汉族", isParty, 70);
        birth=birth.addDays(20);
        isParty = !isParty;
    }
}

void  QTableWidgetDialog::createItemARow(int rowNo, QString name, QString sex, QDate birth, QString nation, bool isPm, int score)
{
    QTableWidgetItem* item;
    QString str;
    uint studID = 201605000;
    item = new QTableWidgetItem(name, ctName);
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    //设置单元格前景色
    // item->setForeground(Qt::darkGray);
    //设置一个图标
    // item->setIcon();
    //设置属性标记
    // item->setFlags(Qt::ItemIsSelectable);
    studID+=rowNo;
    item->setData(Qt::UserRole, QVariant(studID));
    ui->tableWidget->setItem(rowNo, colName, item);
    item = new QTableWidgetItem(sex, ctSex);
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    ui->tableWidget->setItem(rowNo, colSex, item);
    str = birth.toString("yyyy-MM-dd");
    item = new QTableWidgetItem(str, ctBirth);
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    ui->tableWidget->setItem(rowNo, colBirth, item);
    item = new QTableWidgetItem(nation, ctNation);
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    ui->tableWidget->setItem(rowNo, colNation, item);
    str.setNum(score);
    item = new QTableWidgetItem(str, ctScore);
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    ui->tableWidget->setItem(rowNo, colScore, item);
    item = new QTableWidgetItem("党员", ctPartyM);
    if(isPm) {
        //设置单元格勾选状态
        item->setCheckState(Qt::Checked);
    } else {
        item->setCheckState(Qt::Unchecked);
    }
    // //设置单元格背景颜色
    item->setBackground(Qt::yellow);
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    ui->tableWidget->setItem(rowNo, colPartyM, item);
}



void QTableWidgetDialog::on_pbSetCountRow_clicked()
{
    ui->tableWidget->setRowCount(ui->spinBoxCount->text().toInt());
}


void QTableWidgetDialog::on_pbGetData_clicked()
{
    QString str;
    QTableWidgetItem* cellItem;
    ui->textEdit->clear();
    for(int i=0; i<ui->tableWidget->rowCount(); i++) {
        str = QString::asprintf("%d ", i+1);
        for(int j=0; j<ui->tableWidget->columnCount()-1; j++) {
            cellItem = ui->tableWidget->item(i, j);
            str = str+cellItem->text() + " ";
        }
        cellItem = ui->tableWidget->item(i, colPartyM);
        if(cellItem->checkState()==Qt::Checked) {
            str = str+tr("partyM");
        } else {
            str = str+tr("general");
        }
        ui->textEdit->append(str);
    }
}

//单元格切换 触发该信号
void QTableWidgetDialog::on_tableWidget_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
{
    QTableWidgetItem* curItem =ui->tableWidget->item(currentRow, currentColumn);
    if(curItem == NULL) {
        return;
    }
    QString curstr = QString::asprintf("currentRow currentColumn :%d ,%d", currentRow, currentColumn);
    QString prestr = QString::asprintf("previousRow previousColumn :%d,%d", previousRow, previousColumn);
    qDebug()<<"curstr"<<curstr<<"prestr"<<prestr;
}


//插入
void QTableWidgetDialog::on_pbInsertRow_clicked()
{
    int curRow = ui->tableWidget->currentRow();
    ui->tableWidget->insertRow(curRow);
    createItemARow(curRow, "stu2", "man", QDate::fromString("1996-1-1", "yyyy-M-d"), "满族", false, 66);
}


void QTableWidgetDialog::on_pbAddRow_clicked()
{
    int rowCounts = ui->tableWidget->rowCount();
    ui->tableWidget->insertRow(rowCounts);
    createItemARow(rowCounts, "stu1", "man", QDate::fromString("1996-1-1", "yyyy-M-d"), "满族", false, 55);
}


void QTableWidgetDialog::on_pbRemoveCurRow_clicked()
{
    int curRow = ui->tableWidget->currentRow();
    ui->tableWidget->removeRow(curRow);
}


void QTableWidgetDialog::on_pbAutoRowh_clicked()
{
    ui->tableWidget->resizeRowsToContents();
}


void QTableWidgetDialog::on_pbAutoColw_clicked()
{
    ui->tableWidget->resizeColumnsToContents();
}


void QTableWidgetDialog::on_checkBoxEdit_clicked(bool checked)
{
    if(checked) {
        //双击或者获取焦点后单击进入编辑状态
        ui->tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked);
    } else {
        ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
    }
}


void QTableWidgetDialog::on_checkBoxRowHeader_clicked(bool checked)
{
    ui->tableWidget->horizontalHeader()->setVisible(checked);
}


void QTableWidgetDialog::on_checkBoxColHeader_clicked(bool checked)
{
    ui->tableWidget->verticalHeader()->setVisible(checked);
}


void QTableWidgetDialog::on_checkBoxColor_clicked(bool checked)
{
    ui->tableWidget->setAlternatingRowColors(checked);
}


void QTableWidgetDialog::on_radioButtonRow_clicked()
{
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
}


void QTableWidgetDialog::on_radioButtonItem_clicked()
{
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems);
}


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

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

相关文章

嵌入式 Linux 开发的基本概念 及 学习路线

原文链接&#xff1a;https://www.cnblogs.com/DSCC2020/p/13787321.html 1.嵌入式 Linux 开发的基本概念 1.1嵌入式 Linux 的组成 嵌入式 Linux 系统&#xff0c;就相当于一套完整的 PC 软件系统&#xff0c;如下图所示&#xff1a; 1.2嵌入式 Linux 的日常开发流程 Bootloa…

【深度学习】实验10 使用Keras完成逻辑回归

文章目录 使用Keras完成逻辑回归1. 导入Keras库2. 生成数据集3. 构造神经网络模型4. 训练模型5. 测试模型6. 分析模型 附&#xff1a;系列文章 使用Keras完成逻辑回归 Keras是一个开源的深度学习框架&#xff0c;能够高效地实现神经网络和深度学习模型。它由纽约大学的Francoi…

MS5192TA/MS5193TA低噪声、低功耗、16/24 位 ∑-ΔADC

产品简述 MS5192TA/MS5193TA 是一款适合高精度测量应用的低功耗、低 噪声、三通道差分输入的 16bit/24bit 模数转换器。其内部集成了输 入缓冲器、低噪声仪表放大器&#xff0c;当增益设置为 64 &#xff0c;更新速率为 4.17Hz 时&#xff0c;均方根噪声为 25nV 。集…

uniapp自定义底部导航

我这边使用的是uview组件库&#xff0c;进行开发的&#xff01; <template><view class"footer-bar"><u-tabbar :value"select ? select : 0" change"changeTab" :border"true" :fixed"true" :placeholde…

2025汤家凤考研数学,基础视频课程+百度网盘+PDF真题讲解

平时大家都半开玩笑地讲&#xff1a;我数学想要考150分&#xff01;那索性今天这一期&#xff0c;今天认真和大家聊一下&#xff1a; 想考到考研数学150分&#xff0c;应该如何准备&#xff1f; 如果还有小伙伴不知道在哪看汤神的ke&#xff0c;可以看一下以下 2025汤神全程…

JVM入门篇(面试前速补)

近期看看JVM&#xff0c;看了狂神说入门教学&#xff0c;总结下给大家。 文章目录 1、JVM的位置2、JVM的结构体系3、类加载器及双亲委派机制3.1、类加载器作用3.2、类加载器类型3.3、双亲委派机制 * 4、沙箱安全机制5、Native、方法区5.1、Native&#xff08;本地方法栈引用&a…

算法设计.

文章目录 1. 贪心算法&#xff1a;只看当前1.1 零钱兑换问题&#xff1a;力扣322 2. 活动选择问题3. 动态规划3.1 不同路径&#xff1a;3.2 0-1背包问题3.3 完全背包问题3.4 零钱兑换-动态规划 4. 最长公共字串--动态规划5. 最长公共子序列6. 最长递增子序列7. 打家劫舍8. 全排…

从mysql 数据库表导入数据到elasticSearch的几种方式

从MySQL数据库导入数据到Elasticsearch有几种方式&#xff0c;主要包括以下几种&#xff1a; 1. 使用Logstash&#xff1a; Logstash是一个开源的数据收集引擎&#xff0c;可以用来从不同的数据源导入数据到Elasticsearch。它具有强大的数据处理能力和插件生态系统&…

信息熵、KL散度、交叉熵、互信息、点互信息

信息熵 信息量 信息量是对信息的度量&#xff0c;衡量事件的不确定性&#xff0c;越小概率的事件发生了产生的信息量越大。我们应该用什么形式的函数表达信息量呢&#xff1f;除了随着概率增大而减少&#xff0c;这个函数还有具有以下性质&#xff1a; 如果有两个事件x和y彼…

利用Python爬取高德地图全国地铁站点信息

利用Python中的requests库进行地铁站点信息的获取,同时将数据保存在本机excel中 # 首先引入所需要的包 import requests from bs4 import BeautifulSoup import pandas as pd import json# 发送 GET 请求获取网页内容 url http://map.amap.com/subway/index.html response r…

K线实战分析系列之二十三:塔形顶部和塔形底部

K线实战分析系列之二十三&#xff1a;塔形顶部和塔形底部 一、塔形顶部和塔形底部二、塔形顶部和塔形底部总结 一、塔形顶部和塔形底部 塔形顶部&#xff1a;预示着阶段性顶部的形成 塔型底部&#xff1a;预示着阶段性底部的形成 二、塔形顶部和塔形底部总结 形态的两…

字节后端实习 一面凉经

心脏和字节永远都在跳动 深圳还有没有大厂招后端日常实习生啊&#xff0c;求捞&#xff5e;&#xff08;boss小公司也不理我&#xff09; 很纠结要不要干脆直接面暑期实习&#xff0c;又怕因为没有后端实习经历&#xff0c;面不到大厂实习。死锁了

2195. 深海机器人问题(网络流,费用流,上下界可行流,网格图模型)

活动 - AcWing 深海资源考察探险队的潜艇将到达深海的海底进行科学考察。 潜艇内有多个深海机器人。 潜艇到达深海海底后&#xff0c;深海机器人将离开潜艇向预定目标移动。 深海机器人在移动中还必须沿途采集海底生物标本。 沿途生物标本由最先遇到它的深海机器人完成采…

微信公众号公司主体变更怎么办?

公众号迁移的好处有哪些&#xff1f;迁移后原公众号还能用吗&#xff1f;1&#xff09;获得更多权限功能如果公众号是个人主体&#xff0c;想进行认证&#xff0c;拥有更多权限功能。例如菜单栏跳转外部链接&#xff0c;相拥有留言功能&#xff0c;服务号认证获得开发权限等。就…

@德人合科技|公司数据防泄漏软件,防止内部文件数据资料外泄!

现如今&#xff0c;企业都普遍面临数据安全问题的挑战&#xff0c;随着数据泄漏事件不断增加&#xff0c;企业需要强有力的数据防泄漏系统来保护机密信息。 www.drhchina.com 德人合科技 | 公司数据防泄漏软件&#xff0c;防止内部文件数据资料外泄&#xff01; 公司数据防泄漏…

基于springboot的精品在线试题库系统设计与实现(程序+数据库+文档)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 目录 一、研…

微软研究深度报告:Sora文转视频AI模型全景剖析及未来展望

论文由微软研究团队撰写&#xff0c;这篇论文深入探讨了Sora的发展背景、核心技术、新兴应用场景、现有的局限性以及未来的发展机会&#xff0c;基于公开资料和团队自行进行的逆向工程分析。文中详尽且逻辑清晰&#xff0c;建议细读全文以获得深入了解。 原文&#xff1a;Sora…

优思学院《质量工程师入门攻略2024》

作为一名质量工程师&#xff0c;进入这个行业首先需要理解“质量”的本质含义。质量并非单一维度&#xff0c;而是产品或服务在满足预期程度上的体现。从狭义到广义的质量&#xff0c;涵盖从产品细节到客户满意度的多个方面。 1. 质量的定义是以顾客需求为准 第一&#xff0c…

高级语言讲义2018计专(仅高级语言部分)

1.编写完整程序解决中国古代数学家张丘健在他的《算经》中提出的”百钱百鸡问题“&#xff1a;鸡翁一&#xff0c;值钱五&#xff1b;鸡母一&#xff0c;值钱三&#xff1b;鸡雏三&#xff0c;值钱一&#xff1b;百钱买百鸡&#xff0c;翁&#xff0c;母&#xff0c;雏各几何 …

每日一题-链表的中间结点

&#x1f308;个人主页: 会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 上面是解题题目&#xff1a; 解题思路&#xff1a;快慢指针法--慢指针一次指向下一个&#xff0c;快指针一次指向下两个 解答过程&#xff1a; /*** Definition for singly-linked…