如何使用QT Widget实现表格单元格的合并操作?

2026-05-28 03:281阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1194个文字,预计阅读时间需要5分钟。

如何使用QT Widget实现表格单元格的合并操作?

在Qt5中设计窗口并拖放TableWidget控件,展示效果如下:

cpp// 窗口主类class MainWindow : public QMainWindow { Q_OBJECT

public: MainWindow(QWidget *parent=nullptr) : QMainWindow(parent) { // 创建窗口布局 QVBoxLayout *layout=new QVBoxLayout(this);

// 创建TableWidget控件 QTableWidget *tableWidget=new QTableWidget(this); tableWidget->setRowCount(5); // 设置行数 tableWidget->setColumnCount(3); // 设置列数

// 添加一些数据到TableWidget QStringList headers; headers << Column 1 << Column 2

for (int row=0; row rowCount(); ++row) { for (int column=0; column columnCount(); ++column) { QTableWidgetItem *item=new QTableWidgetItem(QString(Row %0, Column %1).arg(row + 1).arg(column + 1)); tableWidget->setItem(row, column, item); } }

// 将TableWidget添加到布局中 layout->addWidget(tableWidget);

// 设置窗口的中心部件为布局 setCentralWidget(new QWidget(this)); setCentralWidget(QWidget::createWindowContainer(this)); }};

#include main_window.h

// main函数int main(int argc, char *argv[]) { QApplication app(argc, argv);

MainWindow window; window.show();

return app.exec();}


在设计窗口拖放一个TableWidget控件

演示效果如下:

如何使用QT Widget实现表格单元格的合并操作?

完整源码 qt5

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
int count = 5;
QList<QString> list = { "C++", "Python", "Qml" };
QMap<QString,QList<QString>> map;
map.insert("QT编程语言",list);

//行与列数
ui->tableWidget->setRowCount(count); //表格行数
ui->tableWidget->setColumnCount(3); //表格列数

//表列头
ui->tableWidget->setHorizontalHeaderItem(0,new QTableWidgetItem("类型")); //修改行表头文字
ui->tableWidget->horizontalHeaderItem(0)->setTextColor(QColor(200,111,30)); //文字颜色
ui->tableWidget->setHorizontalHeaderItem(1,new QTableWidgetItem("语言"));
ui->tableWidget->horizontalHeaderItem(1)->setTextColor(QColor(200,111,30));
ui->tableWidget->setHorizontalHeaderItem(2,new QTableWidgetItem("操作"));
ui->tableWidget->horizontalHeaderItem(2)->setTextColor(QColor(200,111,30));

//表可视与行为控制
ui->tableWidget->verticalHeader()->setVisible(true);//行头数字列是否可见
ui->tableWidget->horizontalHeader()->setVisible(true);//列头数字列是否可见
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//表格不可编辑
ui->tableWidget->showGrid();//显示表格线条

if(count <= 0) return;
int row = 0;

for (QMap<QString,QList<QString>>::iterator i = map.begin(); i != map.end(); i++) {
if(i.value().size() > 1) // i中元素项数大于1 才合并单元格
ui->tableWidget->setSpan(row,0,i.value().size(),1); //合并单元格
ui->tableWidget->setItem(row,0,new QTableWidgetItem(i.key())); //将数据添加到单元格中
int index = 0;
for (QList<QString>::iterator j = i.value().begin(); j != i.value().end(); j++) {
ui->tableWidget->setItem(row,1,new QTableWidgetItem(*j));
QTableWidgetItem* del = new QTableWidgetItem("删除");
del->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
del->setTextColor(QColor(Qt::red));
ui->tableWidget->setItem(row,2,del);
ui->tableWidget->item(row,1)->setCheckState(Qt::Unchecked); //单元格内添加checkbox,Qt::Unchecked 不选择
row++;
index++;
}
}
ui->tableWidget->horizontalHeader()->resizeSection(1,300); //调整为以像素为单位的大小

}

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

qt6

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
int count = 5;
QList<QString> list = { "C++", "Python", "Qml" };
QMap<QString,QList<QString>> map;
map.insert("QT编程语言",list);

//行与列数
ui->tableWidget->setRowCount(count); //表格行数
ui->tableWidget->setColumnCount(3); //表格列数

//表列头
ui->tableWidget->setHorizontalHeaderItem(0,new QTableWidgetItem("类型")); //修改行表头文字
//ui->tableWidget->horizontalHeaderItem(0)->setTextColor(QColor(200,111,30)); //QT5 文字颜色
ui->tableWidget->horizontalHeaderItem(0)->setForeground(QBrush(QColor(200,111,30)));//QT6 文字颜色
ui->tableWidget->setHorizontalHeaderItem(1,new QTableWidgetItem("语言"));
//ui->tableWidget->horizontalHeaderItem(1)->setTextColor(QColor(200,111,30));
ui->tableWidget->horizontalHeaderItem(1)->setForeground(QBrush(QColor(200,111,30)));//QT6 文字颜色
ui->tableWidget->setHorizontalHeaderItem(2,new QTableWidgetItem("操作"));
//ui->tableWidget->horizontalHeaderItem(2)->setTextColor(QColor(200,111,30));
ui->tableWidget->horizontalHeaderItem(2)->setForeground(QBrush(QColor(200,111,30)));//QT6 文字颜色

//表可视与行为控制
ui->tableWidget->verticalHeader()->setVisible(true);//行头数字列是否可见
ui->tableWidget->horizontalHeader()->setVisible(true);//列头数字列是否可见
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//表格不可编辑
ui->tableWidget->showGrid();//显示表格线条

if(count <= 0) return;
int row = 0;

for (QMap<QString,QList<QString>>::iterator i = map.begin(); i != map.end(); i++) {
if(i.value().size() > 1) // i中元素项数大于1 才合并单元格
ui->tableWidget->setSpan(row,0,i.value().size(),1); //合并单元格
ui->tableWidget->setItem(row,0,new QTableWidgetItem(i.key())); //将数据添加到单元格中
int index = 0;
for (QList<QString>::iterator j = i.value().begin(); j != i.value().end(); j++) {
ui->tableWidget->setItem(row,1,new QTableWidgetItem(*j));
QTableWidgetItem* del = new QTableWidgetItem("删除");
del->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
//del->setTextColor(QColor(Qt::red));//qt5特性 文字颜色
del->setForeground(QColor(Qt::red));//qt6特性 文字颜色
ui->tableWidget->setItem(row,2,del);
ui->tableWidget->item(row,1)->setCheckState(Qt::Unchecked); //单元格内添加checkbox,Qt::Unchecked 不选择
row++;
index++;
}
}
ui->tableWidget->horizontalHeader()->resizeSection(1,300); //调整为以像素为单位的大小

}

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

本文共计1194个文字,预计阅读时间需要5分钟。

如何使用QT Widget实现表格单元格的合并操作?

在Qt5中设计窗口并拖放TableWidget控件,展示效果如下:

cpp// 窗口主类class MainWindow : public QMainWindow { Q_OBJECT

public: MainWindow(QWidget *parent=nullptr) : QMainWindow(parent) { // 创建窗口布局 QVBoxLayout *layout=new QVBoxLayout(this);

// 创建TableWidget控件 QTableWidget *tableWidget=new QTableWidget(this); tableWidget->setRowCount(5); // 设置行数 tableWidget->setColumnCount(3); // 设置列数

// 添加一些数据到TableWidget QStringList headers; headers << Column 1 << Column 2

for (int row=0; row rowCount(); ++row) { for (int column=0; column columnCount(); ++column) { QTableWidgetItem *item=new QTableWidgetItem(QString(Row %0, Column %1).arg(row + 1).arg(column + 1)); tableWidget->setItem(row, column, item); } }

// 将TableWidget添加到布局中 layout->addWidget(tableWidget);

// 设置窗口的中心部件为布局 setCentralWidget(new QWidget(this)); setCentralWidget(QWidget::createWindowContainer(this)); }};

#include main_window.h

// main函数int main(int argc, char *argv[]) { QApplication app(argc, argv);

MainWindow window; window.show();

return app.exec();}


在设计窗口拖放一个TableWidget控件

演示效果如下:

如何使用QT Widget实现表格单元格的合并操作?

完整源码 qt5

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
int count = 5;
QList<QString> list = { "C++", "Python", "Qml" };
QMap<QString,QList<QString>> map;
map.insert("QT编程语言",list);

//行与列数
ui->tableWidget->setRowCount(count); //表格行数
ui->tableWidget->setColumnCount(3); //表格列数

//表列头
ui->tableWidget->setHorizontalHeaderItem(0,new QTableWidgetItem("类型")); //修改行表头文字
ui->tableWidget->horizontalHeaderItem(0)->setTextColor(QColor(200,111,30)); //文字颜色
ui->tableWidget->setHorizontalHeaderItem(1,new QTableWidgetItem("语言"));
ui->tableWidget->horizontalHeaderItem(1)->setTextColor(QColor(200,111,30));
ui->tableWidget->setHorizontalHeaderItem(2,new QTableWidgetItem("操作"));
ui->tableWidget->horizontalHeaderItem(2)->setTextColor(QColor(200,111,30));

//表可视与行为控制
ui->tableWidget->verticalHeader()->setVisible(true);//行头数字列是否可见
ui->tableWidget->horizontalHeader()->setVisible(true);//列头数字列是否可见
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//表格不可编辑
ui->tableWidget->showGrid();//显示表格线条

if(count <= 0) return;
int row = 0;

for (QMap<QString,QList<QString>>::iterator i = map.begin(); i != map.end(); i++) {
if(i.value().size() > 1) // i中元素项数大于1 才合并单元格
ui->tableWidget->setSpan(row,0,i.value().size(),1); //合并单元格
ui->tableWidget->setItem(row,0,new QTableWidgetItem(i.key())); //将数据添加到单元格中
int index = 0;
for (QList<QString>::iterator j = i.value().begin(); j != i.value().end(); j++) {
ui->tableWidget->setItem(row,1,new QTableWidgetItem(*j));
QTableWidgetItem* del = new QTableWidgetItem("删除");
del->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
del->setTextColor(QColor(Qt::red));
ui->tableWidget->setItem(row,2,del);
ui->tableWidget->item(row,1)->setCheckState(Qt::Unchecked); //单元格内添加checkbox,Qt::Unchecked 不选择
row++;
index++;
}
}
ui->tableWidget->horizontalHeader()->resizeSection(1,300); //调整为以像素为单位的大小

}

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

qt6

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
int count = 5;
QList<QString> list = { "C++", "Python", "Qml" };
QMap<QString,QList<QString>> map;
map.insert("QT编程语言",list);

//行与列数
ui->tableWidget->setRowCount(count); //表格行数
ui->tableWidget->setColumnCount(3); //表格列数

//表列头
ui->tableWidget->setHorizontalHeaderItem(0,new QTableWidgetItem("类型")); //修改行表头文字
//ui->tableWidget->horizontalHeaderItem(0)->setTextColor(QColor(200,111,30)); //QT5 文字颜色
ui->tableWidget->horizontalHeaderItem(0)->setForeground(QBrush(QColor(200,111,30)));//QT6 文字颜色
ui->tableWidget->setHorizontalHeaderItem(1,new QTableWidgetItem("语言"));
//ui->tableWidget->horizontalHeaderItem(1)->setTextColor(QColor(200,111,30));
ui->tableWidget->horizontalHeaderItem(1)->setForeground(QBrush(QColor(200,111,30)));//QT6 文字颜色
ui->tableWidget->setHorizontalHeaderItem(2,new QTableWidgetItem("操作"));
//ui->tableWidget->horizontalHeaderItem(2)->setTextColor(QColor(200,111,30));
ui->tableWidget->horizontalHeaderItem(2)->setForeground(QBrush(QColor(200,111,30)));//QT6 文字颜色

//表可视与行为控制
ui->tableWidget->verticalHeader()->setVisible(true);//行头数字列是否可见
ui->tableWidget->horizontalHeader()->setVisible(true);//列头数字列是否可见
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//表格不可编辑
ui->tableWidget->showGrid();//显示表格线条

if(count <= 0) return;
int row = 0;

for (QMap<QString,QList<QString>>::iterator i = map.begin(); i != map.end(); i++) {
if(i.value().size() > 1) // i中元素项数大于1 才合并单元格
ui->tableWidget->setSpan(row,0,i.value().size(),1); //合并单元格
ui->tableWidget->setItem(row,0,new QTableWidgetItem(i.key())); //将数据添加到单元格中
int index = 0;
for (QList<QString>::iterator j = i.value().begin(); j != i.value().end(); j++) {
ui->tableWidget->setItem(row,1,new QTableWidgetItem(*j));
QTableWidgetItem* del = new QTableWidgetItem("删除");
del->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
//del->setTextColor(QColor(Qt::red));//qt5特性 文字颜色
del->setForeground(QColor(Qt::red));//qt6特性 文字颜色
ui->tableWidget->setItem(row,2,del);
ui->tableWidget->item(row,1)->setCheckState(Qt::Unchecked); //单元格内添加checkbox,Qt::Unchecked 不选择
row++;
index++;
}
}
ui->tableWidget->horizontalHeader()->resizeSection(1,300); //调整为以像素为单位的大小

}

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