Qtプログラミング – スプレッドシート編集機能 – コピー、削除、切り取り

津路です。
前回では、検索機能を追加しました。
今回は、Editメニューに、コピー、削除、切り取りを実装します。
1.コピースロット
選択中のセルは、selectedRanges関数で取得できます。
QTableWidgetSelectionRange Spreadsheet::selectedRange() const { QList<QTableWidgetSelectionRange> ranges = selectedRanges(); if(ranges.isEmpty()) return QTableWidgetSelectionRange(); return ranges.first(); }
コピースロットでは、これを使って、各行のformulaを改行コードで区切ります。各列は、タブ記号で区切ります。
クリップボードは、QApplication::clipboard()で得られます。
void Spreadsheet::copy() { QTableWidgetSelectionRange range = selectedRange(); printf("range row:%d %d\n",range.rowCount(),range.columnCount()); QString str; for(int i=0; i<range.rowCount(); ++i) { if(i>0) str+= "\n"; for(int j=0; j<range.columnCount(); ++j) { if(j>0) str+="\t"; str+= formula(range.topRow()+ i, range.leftColumn() + j); } } QApplication::clipboard()->setText(str); }
2.削除スロットでは、選択中のセル範囲を、selectedItemsで取得し、それぞれを削除します。
void Spreadsheet::del() { QList<QTableWidgetItem*> items = selectedItems(); printf("items %d",items.count()); if(!items.isEmpty()) { foreach(QTableWidgetItem *item, items) delete item; somethingChanged(); } }
3.上記関数を使って切り取りを実装します。
void Spreadsheet::cut() { copy(); del(); }