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恋恋西风
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!