+ for (int i = 0; i < selected_rows.size(); i++) {
+ const int row = selected_rows.at(i).row();
+
+ // Write out columns in visual order, not logical order
+ for (int c = 0; c < table_view_->horizontalHeader()->count(); c++) {
+ const int column = table_view_->horizontalHeader()->logicalIndex(c);
+
+ if (table_view_->horizontalHeader()->isSectionHidden(column))
+ continue;
+
+ const QModelIndex idx = model_->index(row, column, QModelIndex());
+ QString s = model_->data(idx, Qt::DisplayRole).toString();
+
+ if (save_type == SaveTypeCSVEscaped)
+ out_stream << s.replace(",", "\\,");
+ else
+ out_stream << '"' << s.replace("\"", "\"\"") << '"';
+
+ if (c < (table_view_->horizontalHeader()->count() - 1))
+ out_stream << ",";
+ }
+
+ out_stream << '\r' << '\n';
+ }
+
+ if (out_stream.status() == QTextStream::Ok) {
+ if (save_all)
+ table_view_->clearSelection();