class SQLQueryItemDelegate : public QStyledItemDelegate
{
...
signals:
void paintingDeferred(const QModelIndex& index);
...
};
class SQLQueryDeferredPainter
: public QObject{
Q_OBJECT
public:
protected slots:
void paintLater(const QModelIndex& index);
void paintPendingIndexes();
protected:
QModelIndexList m_indexes;
};
SQLQueryDeferredPainter
::SQLQueryDeferredPainter(QAbstractItemView *view, SQLQueryItemDelegate
*delegate,
QObject *parent
){
m_view = view;
connect(delegate, SIGNAL(paintingDeferred(const QModelIndex&)),
this, SLOT(paintLater(const QModelIndex&)));
m_timer.setSingleShot(true);
m_timer.setInterval(100);
connect(&m_timer, SIGNAL(timeout()),
this, SLOT(paintPendingIndexes()));
}
void SQLQueryDeferredPainter::paintLater(const QModelIndex& index)
{
m_indexes.append(index);
m_timer.start();
}
void SQLQueryDeferredPainter::paintPendingIndexes()
{
foreach(const QModelIndex& index, m_indexes)
m_view->update(index);
m_indexes.clear();
}
class SQLQueryItemDelegate : public QStyledItemDelegate
{
...
signals:
void paintingDeferred(const QModelIndex& index);
...
};
class SQLQueryDeferredPainter : public QObject
{
Q_OBJECT
public:
SQLQueryDeferredPainter(QAbstractItemView *view, SQLQueryItemDelegate *delegate, QObject *parent);
protected slots:
void paintLater(const QModelIndex& index);
void paintPendingIndexes();
protected:
QModelIndexList m_indexes;
QAbstractItemView *m_view;
QTimer m_timer;
};
SQLQueryDeferredPainter::SQLQueryDeferredPainter(QAbstractItemView *view, SQLQueryItemDelegate *delegate, QObject *parent)
: QObject(parent)
{
m_view = view;
connect(delegate, SIGNAL(paintingDeferred(const QModelIndex&)),
this, SLOT(paintLater(const QModelIndex&)));
m_timer.setSingleShot(true);
m_timer.setInterval(100);
connect(&m_timer, SIGNAL(timeout()),
this, SLOT(paintPendingIndexes()));
}
void SQLQueryDeferredPainter::paintLater(const QModelIndex& index)
{
m_indexes.append(index);
m_timer.start();
}
void SQLQueryDeferredPainter::paintPendingIndexes()
{
foreach(const QModelIndex& index, m_indexes)
m_view->update(index);
m_indexes.clear();
}
To copy to clipboard, switch view to plain text mode
Bookmarks