Qt
QTableWidget을 Excel로 복사 붙여넣기 커스텀 클래스만들기
Qt쓰는 사람
2018. 6. 22. 16:03
//.cpp
#include <QApplication>
#include <QClipboard>
#include <QShortcut>
#include <QModelIndex>
#include <QModelIndexList>
#include <QDebug>
#include "TableExcelStyleWidget.h"
struct TableExcelStyleWidget::privateStruct
{
QScopedPointer<QShortcut> mCopyShortcut;
};
TableExcelStyleWidget::TableExcelStyleWidget(QWidget *parent) :
QTableWidget(parent),
d(new privateStruct)
{
this->initVariables();
this->initSignalSlot();
QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(this->sizePolicy().hasHeightForWidth());
this->setSizePolicy(sizePolicy);
}
TableExcelStyleWidget::~TableExcelStyleWidget()
{
}
void TableExcelStyleWidget::initVariables()
{
d->mCopyShortcut.reset(new QShortcut(this));
d->mCopyShortcut->setKey(Qt::CTRL + Qt::Key_C);
this->setAlternatingRowColors(true);
// this->setSelectionBehavior(QAbstractItemView::SelectRows);
//this->sortItems()
}
void TableExcelStyleWidget::initSignalSlot()
{
connect(d->mCopyShortcut.data(), SIGNAL(activated()), this, SLOT(onEmittedCopyShortCut()));
}
void TableExcelStyleWidget::onEmittedCopyShortCut()
{
auto modelItems = this->selectedIndexes();
std::sort(modelItems.begin(), modelItems.end());
int prevRow = 0;
QString clipBoardString;
foreach(auto currentItem, modelItems)
{
if(!clipBoardString.isEmpty())
{
if(currentItem.row() == prevRow)
clipBoardString.append("\t");
else
clipBoardString.append("\n");
}
clipBoardString.append(currentItem.data().toString());
prevRow = currentItem.row();
}
auto clipBoard = QApplication::clipboard();
clipBoard->setText(clipBoardString);
}
//.h
#ifndef TABLE_EXCEL_STYLE_WIDGET_H
#define TABLE_EXCEL_STYLE_WIDGET_H
#include <QTableWidget>
#include <QScopedPointer>
class TableExcelStyleWidget : public QTableWidget
{
private:
Q_OBJECT
struct privateStruct;
public:
explicit TableExcelStyleWidget(QWidget* parent = nullptr);
virtual ~TableExcelStyleWidget();
private:
void initVariables();
void initSignalSlot();
private slots:
void onEmittedCopyShortCut();
private:
QScopedPointer<privateStruct> d;
};
#endif // TABLE_EXCEL_STYLE_WIDGET_H