`
mylove2060
  • 浏览: 335989 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

QT-导出QTableWidget表的信息并格式对齐

阅读更多

Author:QQ174554431


#pragma once
//TraderInformationTable.h
#include <QtGui/QTableWidget>
#include <QtGui/QHeaderView>

class TraderInformationTable :
		public QTableWidget
{
	Q_OBJECT
public:
	TraderInformationTable(QWidget *parent = 0);
	~TraderInformationTable();
	void InitHeader();
	void FakeTraderRecords();

};



//TraderInformationTable.cpp
#include "TraderInformationTable.h"

TraderInformationTable::TraderInformationTable(QWidget *parent) : QTableWidget(parent)
{

	InitHeader();
	FakeTraderRecords();
	resizeColumnsToContents();
}

void TraderInformationTable::InitHeader()
{
	verticalHeader()->hide();
	QStringList headerList;
	headerList.append("Trader Id");
	headerList.append("Trader Account");
	headerList.append("Region");
	headerList.append("Buying Power");
	headerList.append("Currency");
	headerList.append("Office Name");
	setColumnCount(headerList.size());
	setHorizontalHeaderLabels(headerList);
}

void TraderInformationTable::FakeTraderRecords()
{
	QTableWidgetItem *item;
	int rowSize = 0;
	for(int row = 0 ; row <10; row ++)
	{
		rowSize = rowCount();
		insertRow(rowSize);
		for(int i = 0; i<columnCount(); i++)
		{
			item = new QTableWidgetItem();
			if(i == 0)
			{
				item->setText("OPS501");
			}
			else if(i==1)
			{
				item->setText("OPS5001_0000000001");
			}
			else if(i==2)
			{
				item->setText("Asia");
			}
			else if(i==3)
			{
				item->setText("5000000");
			}

			else if(i==4)
			{
				item->setText("USD");
			}

			else if(i==5)
			{
				item->setText("Asia head office");
			}
			
			setItem(rowSize,i,item);

		}
	}

	//////////////////////////////////////////////////////////

	for(int row = 0 ; row <10; row ++)
	{
		rowSize = rowCount();
		insertRow(rowSize);
		for(int i = 0; i<columnCount(); i++)
		{
			item = new QTableWidgetItem();
			if(i == 0)
			{
				item->setText("OPS503");
			}
			else if(i==1)
			{
				item->setText("OPS5003_0000000005");
			}
			else if(i==2)
			{
				item->setText("North America");
			}
			else if(i==3)
			{
				item->setText("50000000000000000");
			}

			else if(i==4)
			{
				item->setText("CAD");
			}

			else if(i==5)
			{
				item->setText("Canada head office");
			}

			setItem(rowSize,i,item);

		}
	}



	//////////////////////////////////////////////////////////

	for(int row = 0 ; row <10; row ++)
	{
		rowSize = rowCount();
		insertRow(rowSize);
		for(int i = 0; i<columnCount(); i++)
		{
			item = new QTableWidgetItem();
			if(i == 0)
			{
				item->setText("DFV501");
			}
			else if(i==1)
			{
				item->setText("DV5001_0000000002");
			}
			else if(i==2)
			{
				item->setText("South America");
			}
			else if(i==3)
			{
				item->setText("2000000000");
			}

			else if(i==4)
			{
				item->setText("USD");
			}

			else if(i==5)
			{
				item->setText("head office capital in Bolivia");
			}
			setItem(rowSize,i,item);
		}
	}


	//////////////////////////////////////////////////////////

	for(int row = 0 ; row <10; row ++)
	{
		rowSize = rowCount();
		insertRow(rowSize);
		for(int i = 0; i<columnCount(); i++)
		{
			item = new QTableWidgetItem();
			if(i == 0)
			{
				item->setText("DFV502");
			}
			else if(i==1)
			{
				item->setText("DV5002_0000000011");
			}
			else if(i==2)
			{
				item->setText("Europe");
			}
			else if(i==3)
			{
				item->setText("4200000000000000000000000000000000000000000");
			}

			else if(i==4)
			{
				item->setText("EUR");
			}

			else if(i==5)
			{
				item->setText("London office capital in  Britain");
			}
			setItem(rowSize,i,item);
		}
	}
	
}

TraderInformationTable::~TraderInformationTable()
{
}




#ifndef EXPORTFILE_H
#define EXPORTFILE_H
//ExportFile.h
#include <QtGui/QDialog>
#include <QtGui/QHBoxLayout>
#include <QtGui/QAction>
#include <QtGui/QMenu>
#include <QtGui/QFileDialog>
#include <fstream>
#include "TraderInformationTable.h"

class ExportFile : public QDialog
{
	Q_OBJECT

public:
	ExportFile(QWidget *parent = 0, Qt::WFlags flags = 0);
	~ExportFile();
public:
	void ExportTable(QTableWidget *in_tableWidget);
	void GetVisualIndexes( QTableWidget* in_table, std::map< int, int> & out_print_index);
private slots:
	void On_Export();
	void on_ContextMenu(const QPoint &pos);
private:
	TraderInformationTable *m_traderInformationTable;
	QHBoxLayout *m_hlayoutTable;
	QAction *m_ExportAct;

	
};

#endif // EXPORTFILE_H



//ExportFile.cpp
#include "exportfile.h"

ExportFile::ExportFile(QWidget *parent, Qt::WFlags flags)
	: QDialog(parent, flags)
{
	m_traderInformationTable = new TraderInformationTable(this);
	m_hlayoutTable = new QHBoxLayout(this);
	m_hlayoutTable->addWidget(m_traderInformationTable);
	setLayout(m_hlayoutTable);
	m_ExportAct = new QAction(tr("Export"),this);
	QObject::connect(m_ExportAct, SIGNAL(triggered()), this,SLOT(On_Export()));
	setContextMenuPolicy(Qt::CustomContextMenu);
	QObject::connect(this,SIGNAL(customContextMenuRequested(const QPoint &)), this,SLOT(on_ContextMenu(const QPoint &)));
	setMinimumSize(800,500);
}

ExportFile::~ExportFile()
{

}

void ExportFile::on_ContextMenu(const QPoint &pos)
{
	QMenu menu(this);
	menu.addAction(m_ExportAct);
	menu.exec(QCursor::pos());
}


void ExportFile::On_Export()
{
	ExportTable(m_traderInformationTable);
}

void ExportFile::ExportTable(QTableWidget *in_tableWidget)
{
	std::string filename;
	filename = "*.txt";
	QFileDialog fileDlg(this);
	fileDlg.setFileMode(QFileDialog::AnyFile);
	fileDlg.setNameFilter(tr("Text (*.txt)"));
	fileDlg.setViewMode(QFileDialog::Detail);
	fileDlg.setAcceptMode(QFileDialog::AcceptSave);
	fileDlg.selectFile((QString)filename.c_str());
	if (fileDlg.exec())
	{
		QStringList fileNames = fileDlg.selectedFiles();
		filename = fileNames[0].toStdString();
	}
	else
	{
		return;
	}
	std::ofstream TxtFile(filename.c_str());
	std::map< int, int> exportIndexMap;
	GetVisualIndexes( in_tableWidget, exportIndexMap);

	//calculate the max length for each field
	std::map<int, int> colMaxLengthMap;
	int colLength = 0;
	int columnCount = exportIndexMap.size();
	for(unsigned int col = 0 ; col < exportIndexMap.size(); col++)
	{
		colLength = in_tableWidget->horizontalHeaderItem( exportIndexMap[col])->text().toStdString().length();
		if(colLength>colMaxLengthMap[col])
		{
			colMaxLengthMap[col] = colLength;
		}
	}

	int rowCount = in_tableWidget->rowCount();
	for(int row = 0 ; row < rowCount; row++)
	{
		columnCount = exportIndexMap.size();
		for(int col = 0 ; col < columnCount ; col++)
		{
			colLength = in_tableWidget->item(row, exportIndexMap[col])->text().toStdString().length();
			if(colLength>colMaxLengthMap[col])
			{
				colMaxLengthMap[col] = colLength;
			}
		}
	}

	//write the file

	int diff = 0;
	columnCount = exportIndexMap.size();
	for(unsigned int col = 0 ; col < exportIndexMap.size(); col++)
	{
		std::string padText;
		int diff = colMaxLengthMap[col] - in_tableWidget->horizontalHeaderItem( exportIndexMap[col])->text().toStdString().length()-1;
		TxtFile <<  in_tableWidget->horizontalHeaderItem( exportIndexMap[col])->text().toStdString(); 
		for(int i= diff ; i>=0 ; i--)
		{
			padText+=" ";
		}
		TxtFile <<padText<<char(9);
	}
	TxtFile << std::endl;

	rowCount = in_tableWidget->rowCount();
	for(int row = 0 ; row < rowCount; row++)
	{
		columnCount = exportIndexMap.size();
		for(int col = 0 ; col < columnCount; col++)
		{
			std::string padText;
			int diff = colMaxLengthMap[col] - in_tableWidget->item(row, exportIndexMap[col])->text().toStdString().length()-1;
			TxtFile << in_tableWidget->item(row, exportIndexMap[col])->text().toStdString();
			for(int i= diff ; i>=0 ; i--)
			{
				padText+=" ";
			}

			if( col != exportIndexMap.size()-1)
			{
				TxtFile<<padText<< char(9);
			}
			else
			{
				TxtFile<<padText<< std::endl;
			}
		}
	}
	TxtFile.close();
}


void ExportFile::GetVisualIndexes( QTableWidget* in_table, std::map< int, int> & out_print_index)
{
	int ColLen = in_table->columnCount();
	for(int col = 0 ; col < ColLen; col++)
	{
		if( in_table->isColumnHidden( col ))
		{
			continue;
		}
		int VisualIndex = in_table->visualColumn( col);
		out_print_index[ VisualIndex ] = col;
	}
}


  • 大小: 97.1 KB
分享到:
评论

相关推荐

    Qt 拖拽-qtablewidget

    你可以根据实际需求扩展MIME数据格式,包含更多的信息,如行索引、列索引等。此外,还可以通过设置`dragMoveEvent`来控制拖动过程中的视觉效果,比如改变鼠标形状或高亮目标区域。 总之,Qt的拖放功能使得...

    QT4 Qtablewidget导入、导出Excel

    QT4中的QTableWidget是Qt库提供的一种用于在GUI应用程序中显示二维表格数据的控件。它是QTableView的变体,提供了更多的交互性,比如直接编辑单元格等。本篇文章将详细探讨如何利用QTableWidget导入和导出Excel数据...

    QT-qtablewidget表头添加复选框QHeaderView

    在 Qt 框架中,要在 QTableWidget的表头中添加复选框,可以通过继承 QHeaderView 并重写 paintSection 方法来实现。 介绍一种继承 QHeaderView的方法分别实现QTableWidget中添加复选框,可全选/全不选/部分选。

    QT QTablewidget的使用

    QT中的QTableWidget是Qt Widgets库中的一个关键组件,它被广泛用于展示表格数据,具有丰富的功能和灵活性。QTableWidget允许用户进行编辑、排序、选择行或单元格,并可以自定义样式,使得在GUI应用中展示数据变得...

    QT 高效 导入导出excel , tableWidget显示

    在QT编程中,高效地导入和导出Excel数据并将其显示在`tableWidget`中是一项常见的需求。这里我们将深入探讨如何实现这一功能,以及优化性能的方法。QT是一个跨平台的应用程序开发框架,提供了丰富的GUI组件,`...

    Qt中使用QTableWidget绘制数据表格的实例

    本实例将深入探讨如何使用QTableWidget来绘制数据表格,并提供一个实用的示例,这对于初学者掌握Qt界面设计是十分有益的。 首先,我们需要理解QTableWidget的基本结构。QTableWidget是一个基于QTableView和...

    QT导出excel文件。

    QT导出EXCEL,从tableWidget列表获取数据导出到excel文件。导出过程使用了excel模板文件,可以从tableWidget读取固定的几列数据导出到excel文件中。其中excel事先设置好文件格式,后续直接读数写数即可。开发过程...

    QTableWidget QTableView 自定义复杂表头(多行表头,表头合并) 、冻结、固定特定的行

    在QT编程中,`QTableWidget` 和 `QTableView` 是两种常用的用于显示表格数据的控件。它们都属于Qt的`QtWidgets`模块,但各自有着不同的特性和使用场景。今天我们将深入探讨如何实现标题中提及的几个关键功能:自定义...

    Qt QTablewidget分页、翻页

    在Qt编程中,QTableWidget是一个非常常用的控件,用于展示二维数据,类似于电子表格。在处理大量数据时,为了提高用户体验,我们通常会为QTableWidget实现分页和翻页功能,使得用户可以轻松浏览数据。本篇将详细介绍...

    实例QT程序 —— QTableWidget 表格行的上下移动

    实例QT程序 —— QTableWidget 表格行的上下移动 编译可以直接运行。 运行环境WIN10 Qt5.9.7 。 资源为源码压缩包: TestMoveRow.rar 相关文章链接如下: ...

    QT-TableWidget多个列和行,合并显示效果自

    3. 设置新创建的单元格的`QTableWidgetItem`,并确保其`Qt::ItemIsEnabled`和`Qt::ItemIsSelectable`标志设置为`false`,这样用户就不会误操作其他被合并的列。 对于行的合并,QT提供了`QTableWidget::mergeCells()...

    Qt读写Xml文件到QTableWidget.rar

    本教程将详细介绍如何在Qt应用中实现XML文件的读取与写入,并将数据展示到QTableWidget中,以及从QTableWidget中保存回XML文件。 首先,Qt提供了QDomDocument类来处理XML文档,它可以解析XML文件并创建一个内存中的...

    qt QTablewidget自绘

    在Qt框架中,`QTableWidget` 是一个非常常用的组件,用于展示表格数据。它提供了丰富的功能,如编辑、排序和选择等。然而,当默认的功能无法满足特定需求时,我们可能需要对`QTableWidget`进行自定义绘制,这就是...

    QTableWidget表头添加复选框实现全选功能

    在Qt编程中,`QTableWidget`是一个非常常用的控件,用于展示二维表格数据。有时候,我们希望在表格的表头中添加复选框,以便实现全选或取消全选的功能,这在处理大量数据时尤其有用。本篇文章将详细解释如何在`...

    QTableWidget 多行表头

    在Qt编程环境中,`QTableWidget` 是一个非常常用的组件,用于展示二维表格数据。它提供了灵活的界面和丰富的功能,适用于多种数据展示需求。在某些情况下,我们可能需要创建一个多行表头来更好地组织和解释复杂的...

    QTableView QTableWidget 复杂表头(多行表头) 、冻结、固定特定的行

    QT QTableView QTableWidget 复杂表头(多行表头) 、(冻结、固定特定的行),具体效果看博客: https://blog.csdn.net/xiezhongyuan07/article/details/82857631

    Qt QTableWidget 基本功能及排序功能

    Qt QTableWidget是Qt库中的一个重要组件,用于在GUI应用程序中展示表格数据。它提供了丰富的功能,包括但不限于添加、删除、修改表格中的项,并且支持用户交互,如通过点击表头实现数据排序。以下是对这些功能的详细...

    qt 表格多行表头,复杂表头

    在Qt编程中,QTableWidget是一个非常常用的组件,用于展示二维数据,通常用于创建简单的表格。然而,有时候我们需要创建更复杂的表格布局,比如带有多行表头的表格。标题"qt 表格多行表头,复杂表头"正是指向这样一...

Global site tag (gtag.js) - Google Analytics