Storing and displaying "large" amoung of data in QTextEdit
-
wrote on 27 Nov 2014, 11:37 last edited by
Hey guys!
I have data stored in vectors that I would like to show in a QTextEdit. What I do now is I create a QTextDocument and a QTextCursor and I append all data as QStrings into that Document like this (altered some things so you can try to compile if needed):
@
QTextDocument* parseDoc(std::vector<double>& time, std::vector<std::array<double,3>>& pos, std::vector<std::array<double,3>>& pos){
parsedDocument = new QTextDocument();
myDocumentCursor = new QTextCursor(parsedDocument);QTextCharFormat textFormat = myDocumentCursor->charFormat();
textFormat.setFontFamily("Courier");
myDocumentCursor->setCharFormat(textFormat);QString formattedString;
formattedString = QString("This is th Data of Some object. It was retrieved on %2\r\n").arg(QDateTime::currentDateTime().toString());
myDocumentCursor->insertText(formattedString);myDocumentCursor->insertBlock();
formattedString = QString("Epoch").leftJustified(21, ' ');
formattedString.append(QString("Position x-Axis").leftJustified(21, ' '));
formattedString.append(QString("Position y-Axis").leftJustified(21, ' '));
formattedString.append(QString("Position z-Axis").leftJustified(21, ' '));
formattedString.append(QString("Velocity x-Axis").leftJustified(21, ' '));
formattedString.append(QString("Velocity y-Axis").leftJustified(21, ' '));
formattedString.append(QString("Velocity z-Axis").leftJustified(16, ' '));
myDocumentCursor->insertText(formattedString);myDocumentCursor->insertBlock();
formattedString.clear();
for(int i = 0; i < time.size(); i++){
formattedString = QString("%1 %2 %3 %4 %5 %6 %7").arg(time[i], -16, 'f', -1)
.arg(pos[i][0], -16, 'f', -1).arg(pos[i][1], -16, 'f', -1).arg(pos[i][2], -16, 'f', -1)
.arg(vel[i][0], -16, 'f', -1).arg(vel[i][1], -16, 'f', -1).arg(vel[i][2], -16, 'f', -1);myDocumentCursor->insertText(formattedString);
myDocumentCursor->insertBlock();
}return parsedDocument;
}
@
Basically this works out quite smoothly, just takes a few minutes as I have roughly 500K lines of data. But there are 2 major problems that I ran into: 1. The memory usage after putting all data into the Document is around 1.2GB, 2. It takes a HUGE amount of time(~15min) to display the document in a QTextEdit (via QTextEdit::setDocument(QTextDocument*)).
So obviously I am doing something wrong. So do you guys have an idea what I should be doing differently?
-
wrote on 5 Dec 2014, 13:21 last edited by
You will probably get better performance if you add some line endings "\n".