QTableWidget用法总结
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();
        // deleteRows();
    });
}
MainWindow::~MainWindow()
{
    delete ui;
}
// 删除选中行
void MainWindow::deleteRows()
{
    QList<QTableWidgetItem*> items = ui->tableWidget->selectedItems();
    int itemCount = items.count();
    for (int i = 0; i < itemCount; ++i) {
        int row = ui->tableWidget->row(items.at(i));
        ui->tableWidget->removeRow(row);
    }
}
// 删除选中行的函数(摘来的)
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恋恋西风
                    
                
                
            
        
浙公网安备 33010602011771号