From c076b305cfec9e8a20817ee92174bda473d00713 Mon Sep 17 00:00:00 2001 From: Nathan Woodrow Date: Sun, 14 Sep 2014 21:18:53 +1000 Subject: [PATCH] Use QPlainTextEdit for message log. Less memory and much much faster then QTableWidget --- src/gui/qgsmessagelogviewer.cpp | 46 +++++++++------------------------ 1 file changed, 12 insertions(+), 34 deletions(-) diff --git a/src/gui/qgsmessagelogviewer.cpp b/src/gui/qgsmessagelogviewer.cpp index d0b6d12258b..19da84f3f78 100644 --- a/src/gui/qgsmessagelogviewer.cpp +++ b/src/gui/qgsmessagelogviewer.cpp @@ -26,6 +26,8 @@ #include #include #include +#include +#include static QIcon icon( QString icon ) { @@ -114,7 +116,7 @@ void QgsMessageLogViewer::logMessage( QString message, QString tag, QgsMessageLo #ifdef ANDROID mCount++; #else - mButton->setToolTip( tr( "%1 message(s) logged." ).arg( mCount++ ) ); + mButton->setToolTip( tr( "Message(s) logged." ) ); #endif if ( !isVisible() && level > QgsMessageLog::INFO ) @@ -131,52 +133,28 @@ void QgsMessageLogViewer::logMessage( QString message, QString tag, QgsMessageLo for ( i = 0; i < tabWidget->count() && tabWidget->tabText( i ) != tag; i++ ) ; - QTableWidget *w; + QPlainTextEdit *w; if ( i < tabWidget->count() ) { - w = qobject_cast( tabWidget->widget( i ) ); + w = qobject_cast( tabWidget->widget( i ) ); tabWidget->setCurrentIndex( i ); } else { - w = new QTableWidget( 0, 3, this ); - w->verticalHeader()->setDefaultSectionSize( 16 ); - w->verticalHeader()->setResizeMode( QHeaderView::ResizeToContents ); - w->verticalHeader()->setVisible( false ); - w->setGridStyle( Qt::DotLine ); - w->setEditTriggers( QAbstractItemView::NoEditTriggers ); - w->setHorizontalScrollMode( QAbstractItemView::ScrollPerPixel ); - w->setVerticalScrollMode( QAbstractItemView::ScrollPerPixel ); - w->setHorizontalHeaderLabels( QStringList() << tr( "Timestamp" ) << tr( "Message" ) << tr( "Level" ) ); + w = new QPlainTextEdit( this ); + w->setReadOnly( true ); tabWidget->addTab( w, tag ); - tabWidget->setCurrentIndex( tabWidget->count() - 1 ); } - int n = w->rowCount(); - - w->setRowCount( n + 1 ); - QTableWidgetItem *item = new QTableWidgetItem( QDateTime::currentDateTime().toString( Qt::ISODate ) ); - w->setItem( n, 0, item ); - w->setItem( n, 1, new QTableWidgetItem( message ) ); - w->setItem( n, 2, new QTableWidgetItem( QString::number( level ) ) ); - w->scrollToBottom(); - - w->horizontalHeader()->resizeSections( QHeaderView::ResizeToContents ); + QString date = QDateTime::currentDateTime().toString( Qt::ISODate ); + message = message.replace( "\n", "
" ); + w->appendHtml( QString("%1 | %2 | %3").arg( date ).arg( QString::number( level ) ).arg( message ) ); + w->verticalScrollBar()->setValue( w->verticalScrollBar()->maximum() ); } void QgsMessageLogViewer::closeTab( int index ) { - QTableWidget *w = qobject_cast( tabWidget->widget( index ) ); - if ( w ) - { - mCount -= w->rowCount(); - if ( mButton ) -#ifdef ANDROID - mCount++; -#else - mButton->setToolTip( tr( "%1 message(s) logged." ).arg( mCount++ ) ); -#endif - } + QPlainTextEdit *w = qobject_cast( tabWidget->widget( index ) ); tabWidget->removeTab( index ); }