My solution using the ideas posted here looks now like this:
#include "ui/ui_WidgetListStringStack.h"
#include <QtCore/QStringList>
#include <QtGui/QStringListModel>
#include <QtCore/QPointer>
class WidgetListStringStack
: public QWidget,
protected Ui_WidgetListStringStack
{
Q_OBJECT
public:
WidgetListStringStack
(QWidget* parent
= 0, Qt
::WFlags flags
= 0);
virtual ~WidgetListStringStack();
private:
QPointer<QStringListModel> StringListModel;
int MaxStackSize;
public:
void addMessage
(QString & message
);
void setMaxStackSize(int value);
};
#include "ui/ui_WidgetListStringStack.h"
#include <QtCore/QStringList>
#include <QtGui/QStringListModel>
#include <QtCore/QPointer>
class WidgetListStringStack : public QWidget, protected Ui_WidgetListStringStack
{
Q_OBJECT
public:
WidgetListStringStack(QWidget* parent = 0, Qt::WFlags flags = 0);
virtual ~WidgetListStringStack();
private:
QPointer<QStringListModel> StringListModel;
QStringList StackList;
int MaxStackSize;
public:
void addMessage(QString & message);
void setMaxStackSize(int value);
};
To copy to clipboard, switch view to plain text mode
WidgetListStringStack
::WidgetListStringStack( QWidget* parent
/*= 0*/, Qt
::WFlags flags
/*= 0*/ ) : QWidget(parent, flags
){
setupUi(this);
setMaxStackSize(100);
}
WidgetListStringStack::~WidgetListStringStack()
{
}
void WidgetListStringStack::setMaxStackSize(int value)
{
MaxStackSize = value;
}
void WidgetListStringStack
::addMessage(QString & message
) {
StackList.append(message);
if (StackList.size() > MaxStackSize)
StackList.removeFirst();
StringListModel->setStringList(StackList);
listView->setModel(StringListModel);
}
WidgetListStringStack::WidgetListStringStack( QWidget* parent /*= 0*/, Qt::WFlags flags /*= 0*/ ) : QWidget(parent, flags)
{
setupUi(this);
setMaxStackSize(100);
StringListModel=new QStringListModel();
}
WidgetListStringStack::~WidgetListStringStack()
{
}
void WidgetListStringStack::setMaxStackSize(int value)
{
MaxStackSize = value;
}
void WidgetListStringStack::addMessage(QString & message)
{
StackList.append(message);
if (StackList.size() > MaxStackSize)
StackList.removeFirst();
StringListModel->setStringList(StackList);
listView->setModel(StringListModel);
}
To copy to clipboard, switch view to plain text mode
I filled it using a timer with 100ms and it does not flicker and looks very smooth.
However I need to look at the last item by default. How do I reset the view at every addMessage() call ?
Bookmarks