QT进阶之路 : 表格QTableWidget篇4-复制黏贴

本人技术小白一枚,运用QT也有一段时间,其中遇到很多问题,也通过网上查阅找到很多解决办法,但是感觉因为

版本问题导致解决方案很多,但是能解决实际问题的不容易,所以就把我工作中遇到的问题和对应版本进行统计,与大家共勉;希望各位大神多给意见;

QT版本号
qt-opensource-windows-x86-mingw492-5.5.1

QT进阶之路 : 表格QTableWidget篇4-复制黏贴

1、表格的复制功能;

将APP中表格内容复制到粘贴板上,行与行之间内容用"\n"隔开,列与列之间内容用"\t";

作用:类似EXCEL表格的复制功能(不同之处在于不能复制合并单元格的内容),可以将复制的内容黏贴到EXCEL表格、APP中表格位置或其他地方;

不多说了直接上代码:

 QString copied_text;
 QList itemList = ui->tableWidget->selectedItems();//选择的项目
 if(itemList.length() == 0)
 {
 return;
 }
 else
 {
 pasteAction->setEnabled(true);
 }
 int current_row = itemList.at(0)->row();
 for(int i = 0; i < itemList.length(); i++)
 {
 if(current_row != itemList.at(i)->row())//判断行数
 {
 current_row = itemList.at(i)->row();//换行
 copied_text.append("\n");//行与行之间用\n间隔
 copied_text.append( itemList.at(i)->text() );
 continue;
 }
 if(0 != i)
 {
 copied_text.append("\t");//列与列之间用\t间隔
 }
 copied_text.append(itemList.at(i)->text());
 }
 copied_text.append("\n");
 QApplication::clipboard()->setText(copied_text);
QT进阶之路 : 表格QTableWidget篇4-复制黏贴

复制的内容

2、黏贴功能

首先是将将黏贴板上的内容用换行符"\n"和制表符"\t"分隔开,然后黏贴到APP的表格控件QTableWidget中;

不论黏贴区域比复制内容的行列数大、小或者相等都能完成对应位置的黏贴;

QString text_to_past = QApplication::clipboard()->text();
 QStringList table_row_data_list = text_to_past.split("\n", QString::SkipEmptyParts);//将黏贴板上内容按照
 QList itemRange= ui->tableWidget->selectedRanges();//获取所选区域
 for(int i = itemRange.at(0).topRow();i<=itemRange.at(0).bottomRow()&&(i-itemRange.at(0).topRow())tableWidget->item(i,j)->setText(row_data_list.at(j- itemRange.at(0).leftColumn()));
 }
 }

注意

a、再for语句的判断中要注意 ;不仅仅要比对所选行列数,还要比对内容的行列数是否符合;

b、如下函数中容器itemRange长度不管选择多大范围都是1;也就是说他的它的内容主要就是所选表格的最上行数、最下行数、最左列数和最有列数;itemRange.length() == 1;无论选择多大范围都是1;

 QList itemRange= ui->tableWidget->selectedRanges();//获取所选区域

如下图途中阴影部分为所选黏贴区域

QT进阶之路 : 表格QTableWidget篇4-复制黏贴

单个单元格黏贴上面复制的内容

QT进阶之路 : 表格QTableWidget篇4-复制黏贴

少单元格黏贴

QT进阶之路 : 表格QTableWidget篇4-复制黏贴

等于单元格黏贴

QT进阶之路 : 表格QTableWidget篇4-复制黏贴

多余内容单元格黏贴


分享到:


相關文章: