Qt: Optimize log viewer to not mess with text rendering if hidden

This commit is contained in:
Jeffrey Pfau 2015-12-28 04:44:16 -05:00
parent 63e1875f6b
commit ad9ea7125f
2 changed files with 26 additions and 6 deletions

View File

@ -69,7 +69,12 @@ LogView::LogView(LogController* log, QWidget* parent)
}
void LogView::postLog(int level, const QString& log) {
m_ui.view->appendPlainText(QString("%1:\t%2").arg(LogController::toString(level)).arg(log));
QString line = QString("%1:\t%2").arg(LogController::toString(level)).arg(log);
if (isVisible()) {
m_ui.view->appendPlainText(line);
} else {
m_pendingLines.enqueue(line);
}
++m_lines;
if (m_lines > m_lineLimit) {
clearLine();
@ -140,11 +145,21 @@ void LogView::setMaxLines(int limit) {
}
}
void LogView::showEvent(QShowEvent*) {
while (!m_pendingLines.isEmpty()) {
m_ui.view->appendPlainText(m_pendingLines.dequeue());
}
}
void LogView::clearLine() {
QTextCursor cursor(m_ui.view->document());
cursor.setPosition(0);
cursor.select(QTextCursor::BlockUnderCursor);
cursor.removeSelectedText();
cursor.deleteChar();
if (m_ui.view->document()->isEmpty()) {
m_pendingLines.dequeue();
} else {
QTextCursor cursor(m_ui.view->document());
cursor.setPosition(0);
cursor.select(QTextCursor::BlockUnderCursor);
cursor.removeSelectedText();
cursor.deleteChar();
}
--m_lines;
}

View File

@ -6,6 +6,7 @@
#ifndef QGBA_LOG_VIEW
#define QGBA_LOG_VIEW
#include <QQueue>
#include <QWidget>
#include "ui_LogView.h"
@ -36,12 +37,16 @@ public slots:
private slots:
void setMaxLines(int);
protected:
virtual void showEvent(QShowEvent*) override;
private:
static const int DEFAULT_LINE_LIMIT = 1000;
Ui::LogView m_ui;
int m_lines;
int m_lineLimit;
QQueue<QString> m_pendingLines;
void setLevel(int level, bool);