首页 > 其他分享 >QTableWidget用法总结

QTableWidget用法总结

时间:2024-09-22 23:47:39浏览次数:1  
标签:总结 Qt QTableWidget 用法 rowCount QTableWidgetItem tableWidget ui MainWindow

QTableWidget用法总结

直接上代码

  • mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDateTime>
#include <QScrollBar>
#include <QFile>
#include <QIODevice>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    int count = 0;
    QString name = "任务";
    QString func = "测试";
    QString note = "无";

    void deleteSelectedRows();
};
#endif // MAINWINDOW_H

  • mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowFlag(Qt::FramelessWindowHint);

    // 设置水平、垂直表头是否显示
    // ui->tableWidget->horizontalHeader()->setVisible(false);
    ui->tableWidget->verticalHeader()->setVisible(false);

    // 设置行数列数
    ui->tableWidget->setRowCount(0);
    ui->tableWidget->setColumnCount(5);

    // 设置是否需要滚动条
    ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    ui->tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

    // 表格样式,一般只用来设置表格、表头(不包括单元格)的背景颜色
    QFile file(":/tableStyle.qss");
    if (file.open(QIODevice::ReadOnly)) {
        qDebug() << "tableStyle.qss open success!";
        QString style = file.readAll();
        ui->tableWidget->setStyleSheet(style);
    }

    // 设置表头
    QStringList header;
    header << "编号" << "名称" << "时间" << "功能" << "备注";
    ui->tableWidget->setHorizontalHeaderLabels(header);

    // 表默认行高、默认行宽
    ui->tableWidget->horizontalHeader()->setDefaultSectionSize(100);
    ui->tableWidget->verticalHeader()->setDefaultSectionSize(40);

    // 表头高度,可使用qss的QTableWidget{height: 80px;}替换
    ui->tableWidget->horizontalHeader()->setMaximumHeight(80);
    ui->tableWidget->horizontalHeader()->setMinimumHeight(80);

    // 水平方向标签拓展剩下的窗口部分,填满表格
    ui->tableWidget->horizontalHeader()->setStretchLastSection(true);

    // 表格行颜色交替
    ui->tableWidget->setAlternatingRowColors(true);

    // 设置选中单元格-单个/整行/整列
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectItems);
    // ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
    // ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectColumns);

    // 设置选中-多选模式
    // ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);   // 表格不需要支持Ctrl、Shift、 Ctrl+A等操作
    ui->tableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);    // 表格支持多选模式,比如Ctrl、Shift、 Ctrl+A、鼠标左键按下滑动多选等操作


    connect(ui->pushButton_exit, &QPushButton::clicked, this, [=](){
        this->close();
    });

    connect(ui->pushButton_add, &QPushButton::clicked, this, [=](){
        count++;

        // 新增一行
        int rowCount = ui->tableWidget->rowCount();
        ui->tableWidget->insertRow(rowCount);

        // 在新一行中添加item,可带参数来初始化文本
        QTableWidgetItem *item0 = new QTableWidgetItem;
        QTableWidgetItem *item1 = new QTableWidgetItem;
        QTableWidgetItem *item2 = new QTableWidgetItem;
        QTableWidgetItem *item3 = new QTableWidgetItem;
        QTableWidgetItem *item4 = new QTableWidgetItem(note);

        // 设置item文本
        item0->setText(QString::number(count));
        item1->setText(name + QString::number(count));
        item2->setText(QDateTime::currentDateTime().toString("yy-MM-dd hh:mm:ss"));
        item3->setText(func);
        item4->setText(note);

        // 设置item内容alignment(对齐)模式
        item0->setTextAlignment(Qt::AlignCenter);
        item1->setTextAlignment(Qt::AlignCenter);
        item2->setTextAlignment(Qt::AlignHCenter);
        item3->setTextAlignment(Qt::AlignVCenter);
        item4->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

        // 将item添加到表格中
        ui->tableWidget->setItem(rowCount, 0, item0);
        ui->tableWidget->setItem(rowCount, 1, item1);
        ui->tableWidget->setItem(rowCount, 2, item2);
        ui->tableWidget->setItem(rowCount, 3, item3);
        ui->tableWidget->setItem(rowCount, 4, item4);
    });

    connect(ui->pushButton_delete, &QPushButton::clicked, this, [=]{
        if (ui->tableWidget->rowCount() > 0){
            count--;

            // 删除一行,此处为最后一行
            ui->tableWidget->removeRow(ui->tableWidget->rowCount() - 1);
        }
    });

    connect(ui->pushButton_delete_selected, &QPushButton::clicked, this, [=](){
        // 删除选中行
        deleteSelectedRows();
    });
}

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

// 删除选中行的函数(摘来的)
void MainWindow::deleteSelectedRows()
{
    QTableWidget *tb = ui->tableWidget;
    QItemSelectionModel  *m_selection = tb->selectionModel();
    QModelIndexList indexList = m_selection->selectedIndexes();
    QList<int> list;
    int prev =-1,curr=-1;
    if(indexList.length()>1){
        //预处理第一行
        prev  = indexList.at(0).row();
        list.append(prev);

        for(int i=1;i<indexList.length();i++){
            //qDebug() <<"row: "<< indexList.at(i).row() <<"column: "<<indexList.at(i).column();
            curr = indexList.at(i).row();
            if(prev ==curr){
                continue;
            }else{
                prev = curr;
                list.append(prev);
            }
        }
    }else if(indexList.length()==1){
        list.append(indexList.at(0).row());
    }else{
        return;
    }
    //从大到小排序,必须从最后一行  往前删除  不然会打乱顺序
    std::sort(list.rbegin(),list.rend());
    //根据填充到的数据 删除选中列
    for(int j = 0; j <list.size(); j++)
    {
        int cc = list.at(j);
        tb->removeRow(cc);           //删除当前行及其items
    }
}


  • tableStyle.qss
QTableWidget{
    background-color: rgba(100, 100, 100, 63);
    alternate-background-color: rgba(50, 50, 50, 63);
}


QHeaderView::section{
    background-color: rgba(100, 100, 100, 127);
}


删除选中行的函数deleteSelectedRows()摘自《Qt QtableWidget、QtableView表格删除选中行、删除单行、删除多行》CSDN恋恋西风

标签:总结,Qt,QTableWidget,用法,rowCount,QTableWidgetItem,tableWidget,ui,MainWindow
From: https://www.cnblogs.com/cpp101/p/18426111

相关文章

  • 经验总结
    本次学习的主要内容为Ubuntu的安装、Ubuntu的基础知识、常用命令以及学习并熟悉用命令行的方式与计算机交互。首先是安装Ubuntu,刚开始接触linux与Ubuntu的时候,我一头雾水,甚至连这些名词都不认识。不过安装Ubuntu还是很简单的,只要认真地看团队发出的视频,一步一步地完成,在不懂的时......
  • Django 路由层 —— 基础用法,以及底层如何实现的
    路由层负责网页URL与函数/类的对应关系用法基本用法urls.py:urlpatterns=[#基本用法path('login/',views.login),#动态输入参数path('info/<int:v1>',views.info),#可以同时传多个参数,path:v3会记录v1-v2/后面的所有路径......
  • 蓝桥杯嵌入式的学习总结
    一.前言    嵌入式竞赛实训平台(CT117E-M4)是北京国信长天科技有限公司设计,生产的一款“蓝桥杯全国软件与信息技术专业人才大赛-嵌入式设计与开发科目“专用竞赛平台,平台以STM32G431RBT6为主控芯片,预留扩展板接口,可为用户提供丰富的实验场景。以下内容都是小编......
  • Python 客户端类库之paho-mqtt学习总结
    实践环境Python3.9.13paho-mqtt2.1.0简介EclipsePahoMQTTPython客户端类库实现了MQTT协议版本5.0,3.1.1,和3.1。该类库提供一个客户端类,允许应用连接到MQTT代理并发布消息,订阅主题并检索发布的消息。同时还提供了一个写其它辅助函数,使向MQTT服务器发布一次性消息变......
  • Redis从基础到实战总结+Redisson分布式锁小结
    一、NoSQL和RDBMS的区别传统的rdbms结构化组织SQL数据和关系都存储在单独的表中操作语言是数据库定义语言严格的一致性基础的事务NoSql不仅仅是数据没有固定的语言键值对存储,列存储、文档存储、图形数据库最终一致性cpa定理和base高性能,高可用,高可扩二、NoSql的四大分类......
  • 关于 最短路 及其 拓展算法 的粗浅总结
    关于最短路及其拓展算法的粗浅总结最短路(Dijkstra)Core_Codeinlinevoiddijkstra(){memset(vis,0,sizeofvis); memset(dis,0x3f,sizeofdis);dis[s]=0;priority_queue<pair<int,int>>q;q.push(make_pair(dis[s],s));while(!q.empty()){......
  • Mybatis相关知识总结
    目录1.什么是Mybatis?2.Mybatis所提供的功能?3.MyBatis的优缺点是什么?4.为什么说mybatis是半自动化orm映射工具?它与全自动的区别在哪里?5.Hibernate和Mybatis的区别?6.JDBC编程有哪些不足之处?Mybatis是如何解决这些问题的?7.Mybatis编程步骤是什么样的?【简化:见下】【详细:......
  • Tarjan算法及其应用 总结+详细讲解+详细代码注释
    \(\text{Tarjan}\)1.引入概念1.强连通分量1.定义在有向图\(G\)中,强连通分量就是满足以下条件的\(G\)的子图:从任意一点出发,都有到达另一个点的路径。不存在一个或者几个点,使得这个子图加入这些点后,这个子图还满足上一个性质。为什么要限定”在有向图中“而不是”在任......
  • NOIP2024模拟赛7 总结
    NOIP2024模拟赛7总结A.恰钱没啥好说的。赛场就过了。比较难蚌的是,第一遍本地测的时候没有写spj,导致我们很多人T1都直接挂零了。不过后来配上重测了。B.排序由于某种神秘原因,导致线段树build写的范围是\(1\simn+1\),update的时候写的也是\(1\simn+1\),然而que......
  • xss跨站漏洞总结
    1.原理指攻击者利用网站程序对用户输入过滤的不足,输入可以显示在页面对其他用户造成影响的HTML代码工具,从而盗取资料,获得管理员信息等。通俗来讲,xss跨站攻击就是寻找输入输出的地方,如url地址处的输入,留言板的输入,来进行js代码的注入,从而获取信息。输入地点:get,post,header,......