[Qt5&控件] 表格列表控件Table Widget的使用

简介: [Qt5&控件] 表格列表控件Table Widget的使用

一、Table Widget控件基本参数设置

1 .设置表格列宽

int tableWidth = ui.tableWidget->width();
ui.tableWidget->setColumnWidth(0, 50);  //设置列宽

2 .隐藏表格最左侧序列号

ui.tableWidget->verticalHeader()->setHidden(true);

3 .设置表格最左侧行数

ui.tableWidget->setItem(m_index, 0, new QTableWidgetItem(QString("%1").arg(m_num, 0, 'f', 0)));

4 .设置表格内容居中

ui.tableWidget->item(m_index, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

5 .设置表格选中字体颜色和背景颜色

// 选中行颜色
ui.tableWidget->setStyleSheet("selection-background-color: red");
// 行背景色 
ui.tableWidget->setStyleSheet("QTableView::Item{background-color:#B7B7B7}");

6 .设置表格是否充满(即行末不留空)以及表格列自动等宽

ui->tableWidget->horizontalHeader()->setStretchLastSection(true);
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

7 .删除所有行及其数据

while (ui.tableWidget->rowCount() > 0)
  {
    ui.tableWidget->setRowCount(0);
  }

二、实现逐行增加数据和删除数据

逐行增加数据:

int    m_index = 0;
  double m_num   = 1;
//获取总行数
  m_index = ui.tableWidget->rowCount();
  m_num = m_index + 1;
  //结果显示
  for (m_index; m_index < m_num; m_index++)
  {
    //隐藏行列号
    ui.tableWidget->verticalHeader()->setHidden(true);       
    //设置最左侧行数                            
    ui.tableWidget->setRowCount(m_index+1);  
    ui.tableWidget->setItem(m_index, 0, new QTableWidgetItem(QString("%1").arg(m_num, 0, 'f', 0)));
    ui.tableWidget->setItem(m_index, 1, new QTableWidgetItem(QString("%1").arg(resultMountOffset->m_offsetCalibX, 0, 'f', 3)));
    ui.tableWidget->setItem(m_index, 2, new QTableWidgetItem(QString("%1").arg(resultMountOffset->m_offsetCalibY, 0, 'f', 3)));
    ui.tableWidget->setItem(m_index, 3, new QTableWidgetItem(QString("%1").arg(resultMountOffset->m_offsetCalibAngel, 0, 'f', 3)));
    //设置表格内容居中
    ui.tableWidget->item(m_index, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);  
    ui.tableWidget->item(m_index, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);  
    ui.tableWidget->item(m_index, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);  
    ui.tableWidget->item(m_index, 3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);      
  }

删除选中行数据并更新序列:

//删除选中行
  int rowIndex = ui.tableWidget->currentRow();
  if (rowIndex != -1)
    ui.tableWidget->removeRow(rowIndex);
  //删除选中行后自动更新序列号 
  for (double index = 0; index < ui.tableWidget->rowCount(); index++)
  {                          
    ui.tableWidget->setItem(index, 0, new QTableWidgetItem(QString("%1").arg(index+1, 0, 'f', 0)));
    ui.tableWidget->item(index, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
  }

三、数据的导出保存成EXCEL

1.头文件.h

#include "qfiledialog.h"
#include <QTextEdit>

2.实现槽函数

void GetMountOffset::slot_btnSaveDates()
{
  ui.tableWidget->horizontalHeaderItem(0);
  //构建html文档内容
  QString filepath = QFileDialog::getSaveFileName(this, tr("Save as..."),
    QString(), tr("EXCEL files (*.xls *.xlsx);;HTML-Files (*.htm *.html);;"));
  QString Begin = QString::fromLocal8Bit("<html><head></head><body><table border=\"1\" >");
  QString end = QString::fromLocal8Bit("</table></body></html>");
  QList<QString> list;
  int row = ui.tableWidget->rowCount();
  int col = ui.tableWidget->columnCount();
  for (int i = 0; i < row; i++)
  {
    QString rowStr = "<tr>";
    for (int j = 0; j < col; j++)
    {
      QString cel = ui.tableWidget->item(i, j)->text();
      rowStr += QString("<td>%1</td>").arg(cel);
    }
    rowStr += "</tr>";
    list.push_back(rowStr);
  }
  QString text = Begin;
  for (int i = 0; i < list.size(); ++i)
  {
    text.append(list.at(i));
  }
  text.append(end);
  QTextEdit textEdit;
  textEdit.setText(text);
  QFile file(filepath);
  if (file.open(QFile::WriteOnly | QIODevice::Text))
  {
    QTextStream ts(&file);
    ts.setCodec("UTF-8");
    ts << textEdit.document()->toHtml("UTF-8");
  }
}

数据导出参考:博客地址传送门

     

三、效果展示


目录
相关文章
|
4月前
|
前端开发 程序员 API
【Qt】控件介绍
【Qt】控件介绍
|
4月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 空白项Spacer
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 空白项Spacer
216 2
|
4月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 表单布局Form Layout
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 表单布局Form Layout
125 2
|
4月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 网格布局Grid Layout
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 网格布局Grid Layout
451 2
|
4月前
|
网络协议 Linux C++
【Qt】多种控件实现“hello world“
【Qt】多种控件实现“hello world“
|
5月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
205 1
|
4月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
118 0
|
3月前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。
|
3月前
|
4月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
212 2