B
Bgag
Guten Abend!
Ich habe gerade ein kleines Problem. Ich arbeite schon seit längerem mit QT, habe jedoch noch nie wirklich eine grafische Oberfläche implementiert. Irgendwann ist immer das erste mal und so ärgere ich mich gerade mit der QTableView herum.
Ich möchte eigentlich nur einzelne Zellen der Tabelle auslesen können, um so einen CSV-String erzeugen zu können. Den betreffenden Code findet ihr am Ende dieses Posts. Die Klasse Spreadsheet, die diese Methode implementiert, erbt ihrerseits von der Klasse QTableView. Später sollen in ihr Daten aus einer Sql-Abfrage abgelegt und dargstellet werden. Die Methode void Spreadsheet::toCsv() soll dann einen Export nach Excel ermöglichen.
Wäre super, wenn mir jemand sagen könnte, was ich beim Durchlaufen der Zeilen und Spalten, bzw. der Ansprache der einzelnen Zellen falsch machen.
Liebe Grüße,
Andreas
Ich habe gerade ein kleines Problem. Ich arbeite schon seit längerem mit QT, habe jedoch noch nie wirklich eine grafische Oberfläche implementiert. Irgendwann ist immer das erste mal und so ärgere ich mich gerade mit der QTableView herum.
Ich möchte eigentlich nur einzelne Zellen der Tabelle auslesen können, um so einen CSV-String erzeugen zu können. Den betreffenden Code findet ihr am Ende dieses Posts. Die Klasse Spreadsheet, die diese Methode implementiert, erbt ihrerseits von der Klasse QTableView. Später sollen in ihr Daten aus einer Sql-Abfrage abgelegt und dargstellet werden. Die Methode void Spreadsheet::toCsv() soll dann einen Export nach Excel ermöglichen.
Wäre super, wenn mir jemand sagen könnte, was ich beim Durchlaufen der Zeilen und Spalten, bzw. der Ansprache der einzelnen Zellen falsch machen.
Liebe Grüße,
Andreas
C++:
void Spreadsheet::toCsv() {
QTextStream out(stdout);
// Define some constants needed, ...
const char delimeter = ',';
const char escape = '"';
const char newline = '\n';
// ... the result string.
QString result = "";
// Loop over all rows, ...
for(int i = 0; i < this->model()->rowCount(); ++i) {
// ... init array to hold the cell strings ...
QStringList* line = new QStringList;
// ... and loop over all columns.
for(int j = 0; i < this->model()->columnCount(); ++j) {
// Fetch the current cell.
// QString cell = this->model()->data(this->model()->index(j,i)).toString();
QModelIndex index = this->indexAt(QPoint(i,j));
QString cell = this->model()->data( index ).toString();
// Escape escape sequences.
if( cell.contains(escape) ) {
cell.replace(escape, QString(escape) + escape);
}
// Pre- and append escapes ...
cell.prepend(escape);
cell.append(escape);
// ... and append cell to result string.
line->append(cell);
out << cell + "\n";
}
// Seperate all cells, append the line ...
result.append(line->join(QString(delimeter)));
// ... and a linebreak to the result string.
result.append(QString(newline));
out << line->join(QString(delimeter)) + "\n";
}
out << result;
}
Zuletzt bearbeitet von einem Moderator: