QTableWidget에서 Excel의 값을 copy & paste 하려면, 아래의 코드를 이용하여, 값을 가져올 수 있다.
QClipboard *clipboard=QApplication::clipboard();
clipboard->text(); //클립보드에 저장된 Excel 의 값 가져오기
clipboard->setText(); //클립보드에 값을 복사한 후, Excel에 값 붙여 넣기
엑셀로 값을 내보내거나 가져올 때 값은 1\t2\t3\n4\t5\t6\n7\t8\t9\n
와 같이 정의 된다.
\t는 Column을 의미하며, \n은 Row를 의미한다.
위의 예시는
1 2 3
4 5 6
7 8 9
를 의미한다.
이 규칙만 잘 알면, copy & paste를 쉽게 할 수 있다.
CustomTableWidget 클래스 생성
void CustomTableWidget::keyPressEvent(QKeyEvent *event)
{
QModelIndexList selectedIndexList=selectedIndexes();
int startRow=selectedIndexList.first().row();
int startColumn=selectedIndexList.first().column();
if(event->matches(QKeySequence::Copy))
{
qSort(selectedIndexList.begin(),selectedIndexList.end());
QClipboard *clipboard=QApplication::clipboard();
QString Text;
foreach (QModelIndex index, selectedIndexList)
{
if(index.row()!=startRow)
{
Text.append("\n");
startRow=index.row();
startColumn=selectedIndexList.first().column();
}
if(index.column()!=startColumn)
{
for(int i=0; i<index.column()-startColumn; i++)
{
Text.append("\t");
}
startColumn=index.column();
}
Text.append(index.data().toString());
}
clipboard->setText(Text);
}
if(event->matches(QKeySequence::Paste))
{
QClipboard *clipboard=QApplication::clipboard();
QStringList rowList=clipboard->text().split("\n");
QStringList columnList;
int number=0;
foreach (QString row, rowList)
{
if(number++<rowList.count()-1)
{
if(row.contains("\t"))
{
columnList=row.split("\t");
foreach (QString column, columnList)
{
if(startColumn>=columnCount())
{
break;
}
else
{
QTableWidgetItem *copyItem=item(startRow,startColumn);
if(copyItem!=NULL)
{
copyItem->setText(column);
}
else
{
setItem(startRow,startColumn,new QTableWidgetItem(column));
}
}
startColumn++;
}
}
else
{
QTableWidgetItem *copyItem=item(startRow,startColumn);
if(copyItem!=NULL)
{
copyItem->setText(row);
}
else
{
setItem(startRow,startColumn,new QTableWidgetItem(row));
}
}
startColumn=selectedIndexList.first().column();
startRow++;
}
}
}
}
'QT' 카테고리의 다른 글
Qt QTableWidget에서의 Copy & Paste & Delete 방법 (0) | 2018.08.17 |
---|---|
Qt QProcess와 tar을 이용한 압축 방법 (0) | 2018.08.14 |
Qt 파일의 체크섬(CheckSum) 확인방법 (0) | 2018.08.09 |
Qt QTreeWidget에 Check 추가 방법 (0) | 2018.07.27 |
QTreeWidget에 Combobox 추가,삭제 방법 (0) | 2018.07.27 |